Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 23 kết quả

Đề tài: Bài tập về chuẩn hóa chuỗi

  1. #1
    Ngày gia nhập
    01 2009
    Nơi ở
    Tân ấp - Hà Nội
    Bài viết
    20

    Mặc định Bài tập về chuẩn hóa chuỗi

    Chào mọi người, mình có bài tập về chuẩn hóa chuỗi. Mong mọi người giúp đỡ. Không biết tại sao, tự dưng không cho code vào tag được, mong anh em thông cảm.

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. #include <ctype.h>
    5. void chuanhoachuoi(char[]);//khai bao nguyen mau ham
    6. void main()
    7. {
    8.     char a[100];
    9.    printf("Nhap vao chuoi:");
    10.    gets(a);
    11.    chuanhoachuoi(a);
    12.    printf("%s",a);
    13.    getch();
    14. }
    15. void chuanhoachuoi(char a[])
    16. {
    17.    int i,j;
    18.    j=strlen(a);
    19.    printf("\nChuan duoc chuan hoa la:");
    20.    for(i=0;i<j;i++)
    21.     if(a[i]>=65&&a[i]<=90)  //kiem tra co phai la ky tu hoa
    22.         a[i]=a[i]+32;        //chuyen tat ca ve ky tu thuong
    23.    for(i=0;i<j;i++)
    24.     if(a[i]==' '&&a[i+1]==' ')  //muc dich la loai bo khoang trang
    25.         strcpy(&a[i],&a[i+1]);
    26.    for(i=0;i<j;i++)
    27.     if(a[i]==' ')
    28.         a[i+1]=toupper(a[i+1]);  //chuyen chu cai sau khoang trang thanh chu hoa
    29.          a[0]=a[0]-32;           //chuyen ky tu dau thanh chu hoa.
    30.    for(i=0;i<j;i++)
    31.     if((a[i]<65&&a[i]!=32)||a[i]>122||(a[i]>90&&a[i]<97)) //soa ky tu khong phai la chu cai trong chuoi.
    32.         strcpy(&a[i],&a[i+1]);
    33. }

    ở bài này, mình test với thu3 thì đúng, nhưng khi test với thu33 thì sai.
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 06-02-2009 lúc 12:15 AM.
    Em còn nhớ hay em đã quên
    Nhớ Sài Gòn mưa rồi chợt nắng
    Nhớ phố xưa quen biết tên bàn chân
    Nhớ đèn đường từng đêm thao thức
    Sáng cho em vòm lá me xanh

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    với tiêu đề này thì mod nên cho vào thùng rác

  3. #3
    Ngày gia nhập
    01 2009
    Nơi ở
    Tân ấp - Hà Nội
    Bài viết
    20

    Trích dẫn Nguyên bản được gửi bởi coder_gate Xem bài viết
    với tiêu đề này thì mod nên cho vào thùng rác
    Xin lỗi. Mình sửa lại phần tiêu đề là. Bài tập về chuẩn hóa chuỗi.
    Em còn nhớ hay em đã quên
    Nhớ Sài Gòn mưa rồi chợt nắng
    Nhớ phố xưa quen biết tên bàn chân
    Nhớ đèn đường từng đêm thao thức
    Sáng cho em vòm lá me xanh

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Xin lỗi. Mình sửa lại phần tiêu đề là. Bài tập về chuẩn hóa chuỗi.
    OK, đã edit. Xem hướng dẫn bỏ code vào tag code tại đây

    Hàm chuẩn hóa chuối còn lỗi nhiều lắm, đặc biệt là xóa kí tự trắng trong chỗi thế là k ổn.

    Nên dùng vòng while thay cho for bài bài toán linh hoạt hơn. Hiện còn thiếu xóa kí tự trắng dư ở đầu vào cuối chuỗi.

    Mình sẽ demo một vài cái để bạn tự sửa.

    Xóa kí tự trắng thừa.
    C Code:
    1. int n=strlen(a), i=1;
    2. while (a[i]!='\0')
    3. {
    4.      if (a[i] == ' ' && a[i+1] == ' ')
    5.      {
    6.           for (j=i+1; j<n-1; ++j) a[j]=a[j+1];
    7.           a[n-1]='\0';
    8.           n--;
    9.      }
    10.      else i++;
    11. }

    Tương tự với hàm xóa kí tự khác chữ cũng sai, sửa như hàm trên chỉ thay đổi điều kiện xóa.

  5. #5
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    đây là bài giải của mình
    bạn đã học qua Pascal chưa?? trong pascal có các hàm xử lý chuỗi rất hay mà C không có , bạn nên mô phỏng lại các hàm này và sử dụng chúng trong C , sẽ rất có ích.
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. #include <ctype.h>
    5.  
    6. void chuanhoachuoi(char[]);//khai bao nguyen mau ham
    7. void strdelete(char *s,int vt,int sl);
    8. int main()
    9. {
    10.    char a[100];
    11.    
    12.    printf("Nhap vao chuoi:");
    13.    gets(a);
    14.    chuanhoachuoi(a);
    15.    printf("Chuoi sau chuan hoa:%s",a);
    16.    getch();
    17. }
    18.  
    19. void strdelete(char *s,int vt,int sl)
    20. {  
    21.     int n=strlen(s),i;
    22.     for (i=vt;i<=n-sl;++i)
    23.         s[i]=s[i+sl];
    24. }
    25. void chuanhoachuoi(char a[])
    26. {
    27.     int i;
    28.     while(a[strlen(a)-1]==' ')// xoa het cac ki tu trong o cuoi chuoi
    29.         a[strlen(a)-1]=0;
    30.     while(a[0]==' ')          //xoa het cac ki tu trong o dau chuoi
    31.         strdelete(a,0,1);
    32.     for(i=0;i<strlen(a);++i)
    33.         if((a[i]>=65)&&(a[i]<=90))  //kiem tra co phai la ky tu hoa
    34.             a[i]+=32;        //chuyen tat ca ve ky tu thuong
    35.  
    36.     i=0;
    37.     while(i<strlen(a))                //xoa hai ki tu trong lien tiep
    38.      if((a[i]==' ')&&(a[i+1]==' '))
    39.          strdelete(a,i,1);
    40.      else ++i;
    41.  
    42.    for(i=0;i<strlen(a);i++)
    43.     if(a[i]==' ')
    44.         a[i+1]-=32;  //chuyen chu cai sau khoang trang thanh chu hoa
    45.    
    46.    a[0]=toupper(a[0]);//chuyen chu cai dau tien thanh chu hoa
    47.      
    48.    
    49.     i=0;
    50.     while(i<strlen(a))    //xoa cac ki tu khong phai la chu cai
    51.     if((a[i]!=' ')&&(!isalpha(a[i])))
    52.         strdelete(a,i,1);
    53.      else ++i;
    54. }
    Đã được chỉnh sửa lần cuối bởi quangnh89 : 07-02-2009 lúc 09:11 AM.

  6. #6
    Ngày gia nhập
    01 2009
    Nơi ở
    Tân ấp - Hà Nội
    Bài viết
    20

    Mặc định Bài tập về chuẩn hóa chuỗi

    Thanks, nhưng bài của cậu cũng chưa đúng.
    Nếu test với chuỗi. thong235 manh567 quang 890
    Thì kết quả của cậu là: Thong5 Manh7 Quang0.
    Em còn nhớ hay em đã quên
    Nhớ Sài Gòn mưa rồi chợt nắng
    Nhớ phố xưa quen biết tên bàn chân
    Nhớ đèn đường từng đêm thao thức
    Sáng cho em vòm lá me xanh

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    bạn đã học qua Pascal chưa?? trong pascal có các hàm xử lý chuỗi rất hay mà C không có , bạn nên mô phỏng lại các hàm này và sử dụng chúng trong C , sẽ rất có ích.
    Tuy nhiên chuỗi của C khác Pascal một chút nên bạn phải chú ý, chuỗi của C là mảng char luôn có thêm một kí tự báo kết thúc chuỗi ở cuối chuỗi đó là '\0'.


    Xem qua cái này xem có ổn hơn không.
    C Code:
    1. void chuanhoachuoi(char a[])
    2. {
    3.     int n=strlen(a),i=n-1;
    4.     while(a[i]==' ')i--;  // xoa het cac ki tu trong o cuoi chuoi
    5.     a[i+1]='/0';
    6.  
    7.     i=0;
    8.     while(a[0]==' ')i++;          //xoa het cac ki tu trong o dau chuoi
    9.     strdelete(a,0,i-1);
    10.  
    11.     n=strlen(a);
    12.     for(i=0; i<n;++i)
    13.         if((a[i]>=65)&&(a[i]<=90))  //kiem tra co phai la ky tu hoa
    14.             a[i]+=32;        //chuyen tat ca ve ky tu thuong
    15.  
    16.     i=0;
    17.     while(i<strlen(a))                //xoa hai ki tu trong lien tiep
    18.      if((a[i]==' ')&&(a[i+1]==' '))
    19.          strdelete(a,i,1);
    20.      else ++i;
    21.  
    22.     n=strlen(a);
    23.    for(i=0; i<n; i++)
    24.     if(a[i]==' ')
    25.         a[i+1]-=32;  //chuyen chu cai sau khoang trang thanh chu hoa
    26.    
    27.    a[0]=toupper(a[0]);//chuyen chu cai dau tien thanh chu hoa
    28.    
    29.    i=0;
    30.    while (a[i]!='\0')        //xoa cac ki tu khong phai la chu cai
    31.    {
    32.         if((!isalpha(a[i]))&&(a[i]!=32))
    33.             strdelete(a,i,1);
    34.         else ++i;
    35.     }
    36. }

  8. #8
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    cái hàm strdelete của tớ có chức năng sau :
    xóa đi sl kí tự trong xâu s kể từ vị trí kí tự có chỉ số vt
    void strdelete(char *s,int vt,int sl);
    đoạn cuối chuơng trình đã sưa lại , bạn chạy thử xem ,
    ban đầu tớ nghĩ chuỗi chuẩn hóa không có các chữ số
    đoạn cuối trong hàm của tớ sửa thành
    Code:
    for(i=0;i<strlen(a);i++)        //xoa cac ki tu khong phai la chu cai
       {if(isalpha(a[i])||isdigit(a[i])||a[i]==' ') continue;
            strdelete(a,i,1);
            }

  9. #9
    Ngày gia nhập
    01 2009
    Nơi ở
    Tân ấp - Hà Nội
    Bài viết
    20

    Trích dẫn Nguyên bản được gửi bởi quangnh89 Xem bài viết
    cái hàm strdelete của tớ có chức năng sau :
    xóa đi sl kí tự trong xâu s kể từ vị trí kí tự có chỉ số vt
    void strdelete(char *s,int vt,int sl);
    đoạn cuối chuơng trình đã sưa lại , bạn chạy thử xem ,
    ban đầu tớ nghĩ chuỗi chuẩn hóa không có các chữ số
    đoạn cuối trong hàm của tớ sửa thành
    Code:
    for(i=0;i<strlen(a);i++)        //xoa cac ki tu khong phai la chu cai
       {if(isalpha(a[i])||isdigit(a[i])||a[i]==' ') continue;
            strdelete(a,i,1);
            }
    Bài của bác vẫn chưa được, tớ test rồi. Bài của bác Quang hoàng cũng thế, bài của bác hoàng còn không chạy, bác bỏ đau mất cái hàm delete của em rồi
    Em còn nhớ hay em đã quên
    Nhớ Sài Gòn mưa rồi chợt nắng
    Nhớ phố xưa quen biết tên bàn chân
    Nhớ đèn đường từng đêm thao thức
    Sáng cho em vòm lá me xanh

  10. #10
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Thủe xem bài của mình có khá hơn không nhé, không biết có đáp ứng được nhu cầu của cậu không.

    Code:
    #include <conio.h>
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    main()
    {
    	char *a;
    	printf("\nNhap vao chuoi : ");gets(a);
    	for(int i=0;i<strlen(a);i++)
    	{
    		if(a[0]==' ')
    		{
    		for(int j=0;j<strlen(a);j++)
    			a[j]=a[j+1];
    		i--;
    		}
    		if(a[i]==' '&&a[i+1]==' ')
    		{
    			for(int j=i;j<strlen(a);j++)
    				a[j]=a[j+1];
    			i--;
    		}
    	}
    	for(i=0;i<strlen(a);i++)
    	{
    		if(i==0) a[0]=toupper(a[0]);
    		if(a[i]==' ') a[i+1]=toupper(a[i+1]);
    	}
    	printf("Chuoi moi la : ");puts(a);
    	getch();
    }

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

  1. Chuẩn hóa chuỗi!!! Help
    Gửi bởi pato24193 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 1
    Bài viết cuối: 02-01-2013, 09:32 PM
  2. Bài tập C Có Chuẩn Hóa Chuỗi Xóa Tab Và Xuống Dòng ?
    Gửi bởi traipro_latuiday trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 31-12-2011, 01:26 PM
  3. Bài tập C thắc mắc về thuật toán chuẩn hóa chuỗi
    Gửi bởi behoclaptrinh1993 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 14-11-2011, 09:32 AM
  4. 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
  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