Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Chuẩn hóa xâu ký tự tên người trong lập trình C

  1. #1
    Ngày gia nhập
    11 2010
    Bài viết
    124

    Mặc định Chuẩn hóa xâu ký tự tên người trong lập trình C

    Nhờ mọi người test hộ xem code chuẩn hóa xâu vậy đã ổn chưa, còn bug hay trường hợp nào phải thêm nữa ko, thanks
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>

    void DelWhiteSpaces(chartext)
    {
         
    int i,j=0;
         
    //int length = strlen(text);
        
    for(i=0;i<strlen(text);i++)
            if((
    j==0&&text[i]!=' ')||(j&&text[i-1]==' '&&text[i]!=' ')) 
                
    text[j++]=text[i];
            else if((
    j&&text[i]!=' ')||(j&&text[i-1]!=' '&&text[i]==' '))  
                    
    text[j++]=text[i];
              if(
    text[j-1]==' 'text[j-1]=NULL
    }
    charInsertWhiteSpaces(chartext)
    {
        
    int i,j;
        
    chartext1=NULL;
        
    int length strlen(text);
        for(
    i=0;i<length;i++){
            if(
    text[i+1]!=' '&&(text[i]=='.'||text[i]==','||text[i]=='!'||text[i]==':'||text[i]==';'||text[i]=='?'))
            {
                
    int n=length +1;
                 
    text1=(char*)malloc(sizeof(n));
                
    strcpy(text1,text);
                for(
    j=n-1;j>=i;j--)
                    
    text1[j+1]=text1[j];
                
    text1[i+1]=' ';
            }        
        }
        if(
    text1) return text1;
        else return 
    text;
    }
    void Uppercase(chartext)
    {
        
    int i,j;
        
    int length strlen(text);
        
    text[0]=toupper((int)text[0]);
        for(
    i=0;i<length;i++)
            if(
    text[i]==' '&&(text[i-1]=='.'||text[i-1]=='!'||text[i-1]=='?'))
                
    text[i+1]=toupper((int)text[i+1]);
    }
    void NormalizeText(chartext){
        
    int i,j;
        
    int length strlen(text);
        for(
    i=0;i<length;i++){
            if(
    text[i]==' '&&(text[i+1]=='.'||text[i+1]==','||text[i+1]=='!'||text[i+1]==':'||text[i+1]==';'||text[i+1]=='?'))
            {
                for(
    j=i;j<length;j++)
                    
    text[j]=text[j+1];
                
    length--;    
            }    
        }
    }
    main()
    {
        
    char xau[100];
        
    printf("Nhap vao 1 chuoi de test thu\n");
        
    gets(xau);
        
    chartext1 InsertWhiteSpaces(xau);
        
    DelWhiteSpaces(text1);
        
    NormalizeText(text1);
        
    Uppercase(text1);
        
    printf("Chuoi sau khi duoc chuan hoa\n%s\n",text1);
        
    printf("co do dai:%d",strlen(text1));
        
    printf("\n\n");
        
    getch();


  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Thế mà mình cứ nghĩ chỉ cần ngắn gọn như thế này thôi chứ
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <ctype.h>

    void themcach(char *xau,int index)
    {
        for(
    int i=strlen(xau)+1;i>index&&i>0;i--) xau[i]=xau[i-1];
        
    xau[index]=' ';
    }
    void chuanhoa(char *xau)
    {
        
    int i,j=0;
        for(
    i=0;i<strlen(xau);i++)
        {
            if (
    j==0&&strchr(",.!;:?",xau[i])) continue;
            else if (
    i&&j&&strchr(",.!;:?",xau[i-1])&&xau[i]!=' 'themcach(xau,i);
            if (
    j&&strchr(",.!;:?",xau[i])&&xau[j-1]==' ')  xau[j-1]=xau[i],xau[j]=' ';
            else if ((
    j==0&&xau[i]!=' ')||(j&&xau[j-1]==' '&&xau[i]!=' ')) xau[j++]=toupper(xau[i]);
            else if ((
    j&&xau[i]!=' ')||(j&&xau[i-1]!=' '&&xau[i]==' ')) xau[j++]=xau[i];
        }
        
    xau[j-1*(j&&xau[j-1]==' ')]=NULL;
    }
    void main()
    {
        
        
    char xau[200];
        
    scanf("%[^\n]",xau);
        
    chuanhoa(xau);
        
    printf("%s",xau);
        
    getch();

    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  3. #3
    Ngày gia nhập
    11 2010
    Bài viết
    124

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    Thế mà mình cứ nghĩ chỉ cần ngắn gọn như thế này thôi chứ
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <ctype.h>

    void themcach(char *xau,int index)
    {
        for(
    int i=strlen(xau)+1;i>index&&i>0;i--) xau[i]=xau[i-1];
        
    xau[index]=' ';
    }
    void chuanhoa(char *xau)
    {
        
    int i,j=0;
        for(
    i=0;i<strlen(xau);i++)
        {
            if (
    j==0&&strchr(",.!;:?",xau[i])) continue;
            else if (
    i&&j&&strchr(",.!;:?",xau[i-1])&&xau[i]!=' 'themcach(xau,i);
            if (
    j&&strchr(",.!;:?",xau[i])&&xau[j-1]==' ')  xau[j-1]=xau[i],xau[j]=' ';
            else if ((
    j==0&&xau[i]!=' ')||(j&&xau[j-1]==' '&&xau[i]!=' ')) xau[j++]=toupper(xau[i]);
            else if ((
    j&&xau[i]!=' ')||(j&&xau[i-1]!=' '&&xau[i]==' ')) xau[j++]=xau[i];
        }
        
    xau[j-1*(j&&xau[j-1]==' ')]=NULL;
    }
    void main()
    {
        
        
    char xau[200];
        
    scanf("%[^\n]",xau);
        
    chuanhoa(xau);
        
    printf("%s",xau);
        
    getch();

    Còn trường hợp này "abc ! xyz" chạy sẽ ra "Abc!xyz"

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    này thì ! này
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <ctype.h>

    void themcach(char *xau,int index)
    {
        for(
    int i=strlen(xau)+1;i>index&&i>0;i--) xau[i]=xau[i-1];
        
    xau[index]=' ';
    }
    void chuanhoa(char *xau)
    {
        
    int i,j=0;
        for(
    i=0;i<strlen(xau);i++)
        {
            if (
    j==0&&strchr(",.\!;:?",xau[i])) continue;
            else if (
    i&&j&&strchr(",.\!;:?",xau[i-1])&&xau[i]!=' 'themcach(xau,i);

            if (
    j&&strchr(",.\!;:?",xau[i])&&xau[j-1]==' ')  xau[j-1]=xau[i],xau[j]=' ';
            else if ((
    j==0&&xau[i]!=' ')||(j&&xau[j-1]==' '&&xau[i]!=' ')) xau[j++]=toupper(xau[i]);
            else if ((
    j&&xau[i]!=' ')||(j&&xau[i-1]!=' '&&xau[i]==' ')) xau[j++]=xau[i];
        }
        
    xau[j-1*(j&&xau[j-1]==' ')]=NULL;
    }

    void main()
    {

        
    char xau[200];
        
    scanf("%[^\n]",xau);
        
    chuanhoa(xau);
        
    printf("%s",xau);
        
    getch();

    Đã được chỉnh sửa lần cuối bởi langman : 20-12-2010 lúc 09:31 PM.
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Thay vì dùng:
    C Code:
    1. xau[j++]=toupper(xau[i]);
    có thể viết:
    C Code:
    1. // Chuyển đổi qua lại giữa chữ thường và CHỮ HOA (bảng mã ASCII) bằng cách bật/tắt bit 0010 0000
    2. xau[j++]=xau[i] ^ 0x20;
    Nhanh hơn nhiều
    Đã được chỉnh sửa lần cuối bởi doicanhden : 25-10-2012 lúc 12:33 AM.

  6. #6
    Ngày gia nhập
    07 2010
    Bài viết
    1

    Mặc định chuẩn hóa chuỗi

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    này thì ! này
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <ctype.h>

    void themcach(char *xau,int index)
    {
        for(
    int i=strlen(xau)+1;i>index&&i>0;i--) xau[i]=xau[i-1];
        
    xau[index]=' ';
    }
    void chuanhoa(char *xau)
    {
        
    int i,j=0;
        for(
    i=0;i<strlen(xau);i++)
        {
            if (
    j==0&&strchr(",.\!;:?",xau[i])) continue;
            else if (
    i&&j&&strchr(",.\!;:?",xau[i-1])&&xau[i]!=' 'themcach(xau,i);

            if (
    j&&strchr(",.\!;:?",xau[i])&&xau[j-1]==' ')  xau[j-1]=xau[i],xau[j]=' ';
            else if ((
    j==0&&xau[i]!=' ')||(j&&xau[j-1]==' '&&xau[i]!=' ')) xau[j++]=toupper(xau[i]);
            else if ((
    j&&xau[i]!=' ')||(j&&xau[i-1]!=' '&&xau[i]==' ')) xau[j++]=xau[i];
        }
        
    xau[j-1*(j&&xau[j-1]==' ')]=NULL;
    }

    void main()
    {

        
    char xau[200];
        
    scanf("%[^\n]",xau);
        
    chuanhoa(xau);
        
    printf("%s",xau);
        
    getch();

    Anh Langman giải thích cho em thêm về 2 cái hàm themcach và chuanhoa đi
    Thank !

  7. #7
    Ngày gia nhập
    02 2012
    Nơi ở
    hà nội
    Bài viết
    58

    Ai giải thíck giup mình đoạn lenh này dc ko. thanks you.
    Code:
    xau[j-1*(j&&xau[j-1]==' ')] = NULL;

  8. #8
    Ngày gia nhập
    02 2012
    Bài viết
    4

    hay ! :x
    nhưng code ngắn chưa chắc số phép tính sẽ ít
    Đã được chỉnh sửa lần cuối bởi phhdinh : 25-10-2012 lúc 01:38 AM.

  9. #9
    Ngày gia nhập
    02 2012
    Nơi ở
    hà nội
    Bài viết
    58

    Thì ra code của Langman là nhặt từng kí tự của xâu ban đầu cho vào 1 xâu khác, thay vì cho vào xâu mới khác thì dùng luôn xâu ban đầu.
    Code:
    xau[j-1*(j&&xau[j-1]==' ')] = NULL;
    Đặt kí tự kết thúc xâu. Giờ thì e đã hiểu

  10. #10
    Ngày gia nhập
    09 2014
    Nơi ở
    Bồng Lai
    Bài viết
    27

    Định Dạng Tên Người code như này các bác thấy sao :v

    #include<iostream>
    #include<conio.h>
    #include<stdio.h>
    #include<string.h>

    inline void Nhap(char *S)
    {
    std::cout << "\nNhap Noi Dung Chuoi Ky Tu : ";
    fflush(stdin);gets(S);
    }
    inline void In(char *S)
    {
    puts(S);
    }
    void DDang(char *S)
    {
    for(int i=0;i<strlen(S);i++)
    if(S[i]>='A'&&S[i]<='Z')
    if(S[i]!=' ')
    S[i]+=32;

    if(S[0]>='a'&&S[0]<='z')
    S[0]-=32;
    for(int i=1;i<strlen(S);i++)
    {
    if(S[i]==' ')
    if(S[i+1]>='a'&&S[i+1]<='z')
    S[i+1]-=32;
    }
    }
    int main()
    {
    char *S;
    S = new char;
    Nhap(S);std::cout << "\nNoi Dung Chuoi Da Nhap : ";In(S);
    std::cout << "\nNoi Dung Chuoi Da Dinh Dang : ";DDang(S);In(S);
    return 0;
    }

Các đề tài tương tự

  1. Kỹ thuật C Chuẩn hóa xâu ký tự trong lập trình C
    Gửi bởi zero22hero trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 23-12-2011, 11:41 AM
  2. Bài tập C Tách và chuẩn hóa họ tên từ chuỗi
    Gửi bởi bachdev trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 02-11-2011, 08:16 AM
  3. Lập trình C Chuẩn hóa một đoạn ký tự trong C?
    Gửi bởi danchoihj trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 15-03-2011, 01:09 PM
  4. Chuẩn hóa 1 xâu kí tự nhập từ bàn phím trong lập trình C?
    Gửi bởi trai xu nghe trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 24-07-2010, 12:38 PM
  5. Hỏi về chuẩn hóa chuỗi ký tự trong MFC (VC++)
    Gửi bởi huyfeng trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 7
    Bài viết cuối: 14-10-2009, 02:42 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn