10
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: Lựa chọn code | Ẩn/Hiện code #include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> void chuanhoachuoi(char[]);//khai bao nguyen mau ham void main() { char a[100]; printf ("Nhap vao chuoi:"); gets (a); chuanhoachuoi(a); printf ("%s",a); getch(); } void chuanhoachuoi(char a[]) { int i,j; j=strlen (a); printf ("\nChuan duoc chuan hoa la:"); for(i=0;i<j;i++) if(a[i]>=65&&a[i]<=90) //kiem tra co phai la ky tu hoa a[i]=a[i]+32; //chuyen tat ca ve ky tu thuong for(i=0;i<j;i++) if(a[i]==' '&&a[i+1]==' ') //muc dich la loai bo khoang trang strcpy (&a[i],&a[i+1]); for(i=0;i<j;i++) if(a[i]==' ') a[i+1]=toupper (a[i+1]); //chuyen chu cai sau khoang trang thanh chu hoa a[0]=a[0]-32; //chuyen ky tu dau thanh chu hoa. for(i=0;i<j;i++) 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. strcpy (&a[i],&a[i+1]); } ở bài này, mình test với thu3 thì đúng, nhưng khi test với thu33 thì sai. __________________

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

Embed Size (px)

DESCRIPTION

hay

Citation preview

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

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:Lựa chọn code | Ẩn/Hiện code

#include <stdio.h>#include <conio.h>#include <string.h>#include <ctype.h>void chuanhoachuoi(char[]);//khai bao nguyen mau hamvoid main(){    char a[100];   printf("Nhap vao chuoi:");   gets(a);   chuanhoachuoi(a);   printf("%s",a);   getch();}void chuanhoachuoi(char a[]){   int i,j;   j=strlen(a);   printf("\nChuan duoc chuan hoa la:");   for(i=0;i<j;i++)    if(a[i]>=65&&a[i]<=90)  //kiem tra co phai la ky tu hoa        a[i]=a[i]+32;        //chuyen tat ca ve ky tu thuong   for(i=0;i<j;i++)    if(a[i]==' '&&a[i+1]==' ')  //muc dich la loai bo khoang trang        strcpy(&a[i],&a[i+1]);   for(i=0;i<j;i++)    if(a[i]==' ')        a[i+1]=toupper(a[i+1]);  //chuyen chu cai sau khoang trang thanh chu hoa         a[0]=a[0]-32;           //chuyen ky tu dau thanh chu hoa.   for(i=0;i<j;i++)    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.        strcpy(&a[i],&a[i+1]);}

ở bài này, mình test với thu3 thì đúng, nhưng khi test với thu33 thì sai. __________________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

Đã được chỉnh sửa lần cuối bởi QuangHoang : 06-02-2009 lúc 12:15 AM.

thongnlkh_aptech

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

Xem Hồ sơ công khai

Gửi một tin nhắn tới thongnlkh_aptech

Tìm toàn bộ bài viết bởi thongnlkh_aptech

  #2  

05-02-2009, 11:29 PM

Banned  

Ngày gia nhập: 02 2008Bài viết: 1,010

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

AlexF

Xem Hồ sơ công khai

Tìm toàn bộ bài viết bởi AlexF

  #3  

05-02-2009, 11:39 PM

thongnlkh_aptech Thành viên mới  

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

Trích dẫn:Nguyên bản được gửi bởi coder_gate với tiêu đề này thì mod nên cho vào thùng rácXin 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

thongnlkh_aptech

Xem Hồ sơ công khai

Gửi một tin nhắn tới thongnlkh_aptech

Tìm toàn bộ bài viết bởi thongnlkh_aptech

  #4  

06-02-2009, 12:39 AM

QuangHoang ..::SeArCh LoVe::..  

Ngày gia nhập: 02 2008Nơi ở: Việt NamBài viết: 580

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

Trích dẫn: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:

Lựa chọn code | Ẩn/Hiện codeint n=strlen(a), i=1;while (a[i]!='\0'){     if (a[i] == ' ' && a[i+1] == ' ')     {          for (j=i+1; j<n-1; ++j) a[j]=a[j+1];          a[n-1]='\0';          n--;     }     else i++;}

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. __________________Diễn đàn lập trình C/C++/C#/Objective-C, ...

QuangHoang

Xem Hồ sơ công khai

Gửi một tin nhắn tới QuangHoang

Tìm toàn bộ bài viết bởi QuangHoang

  #5  

06-02-2009, 10:21 AM

quangnh89 Thành viên nhiệt tình  

Ngày gia nhập: 11 2007Nơi ở: Hà NộiBài viết: 426

đâ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:

Lựa chọn code | Ẩn/Hiện code

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

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

void chuanhoachuoi(char[]);//khai bao nguyen mau hamvoid strdelete(char *s,int vt,int sl);int main(){   char a[100];      printf("Nhap vao chuoi:");   gets(a);   chuanhoachuoi(a);   printf("Chuoi sau chuan hoa:%s",a);   getch();}

void strdelete(char *s,int vt,int sl){      int n=strlen(s),i;    for (i=vt;i<=n-sl;++i)        s[i]=s[i+sl];}void chuanhoachuoi(char a[]){    int i;    while(a[strlen(a)-1]==' ')// xoa het cac ki tu trong o cuoi chuoi        a[strlen(a)-1]=0;    while(a[0]==' ')          //xoa het cac ki tu trong o dau chuoi        strdelete(a,0,1);    for(i=0;i<strlen(a);++i)        if((a[i]>=65)&&(a[i]<=90))  //kiem tra co phai la ky tu hoa            a[i]+=32;        //chuyen tat ca ve ky tu thuong     i=0;    while(i<strlen(a))                //xoa hai ki tu trong lien tiep     if((a[i]==' ')&&(a[i+1]==' '))         strdelete(a,i,1);     else ++i;

   for(i=0;i<strlen(a);i++)    if(a[i]==' ')        a[i+1]-=32;  //chuyen chu cai sau khoang trang thanh chu hoa      a[0]=toupper(a[0]);//chuyen chu cai dau tien thanh chu hoa             i=0;    while(i<strlen(a))    //xoa cac ki tu khong phai la chu cai    if((a[i]!=' ')&&(!isalpha(a[i])))        strdelete(a,i,1);     else ++i;}

Đã được chỉnh sửa lần cuối bởi quangnh89 : 07-02-2009 lúc 09:11 AM.

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

quangnh89

Xem Hồ sơ công khai

Gửi một tin nhắn tới quangnh89

Tìm toàn bộ bài viết bởi quangnh89

  #6  

06-02-2009, 10:48 AM

thongnlkh_aptech Thành viên mới  

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

Thanks, nhưng bài của cậu cũng chưa đúng.Nếu test với chuỗi. thong235 manh567 quang 890Thì 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

thongnlkh_aptech

Xem Hồ sơ công khai

Gửi một tin nhắn tới thongnlkh_aptech

Tìm toàn bộ bài viết bởi thongnlkh_aptech

  #7  

06-02-2009, 12:52 PM

QuangHoang ..::SeArCh LoVe::..  

Ngày gia nhập: 02 2008Nơi ở: Việt NamBài viết: 580

Trích dẫn: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:

Lựa chọn code | Ẩn/Hiện codevoid chuanhoachuoi(char a[]){    int n=strlen(a),i=n-1;    while(a[i]==' ')i--;  // xoa het cac ki tu trong o cuoi chuoi

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

    a[i+1]='/0';

    i=0;    while(a[0]==' ')i++;          //xoa het cac ki tu trong o dau chuoi    strdelete(a,0,i-1);

    n=strlen(a);    for(i=0; i<n;++i)        if((a[i]>=65)&&(a[i]<=90))  //kiem tra co phai la ky tu hoa            a[i]+=32;        //chuyen tat ca ve ky tu thuong     i=0;    while(i<strlen(a))                //xoa hai ki tu trong lien tiep     if((a[i]==' ')&&(a[i+1]==' '))         strdelete(a,i,1);     else ++i;

    n=strlen(a);   for(i=0; i<n; i++)    if(a[i]==' ')        a[i+1]-=32;  //chuyen chu cai sau khoang trang thanh chu hoa      a[0]=toupper(a[0]);//chuyen chu cai dau tien thanh chu hoa       i=0;    while (a[i]!='\0')        //xoa cac ki tu khong phai la chu cai   {        if((!isalpha(a[i]))&&(a[i]!=32))            strdelete(a,i,1);        else ++i;    }}__________________Diễn đàn lập trình C/C++/C#/Objective-C, ...

QuangHoang

Xem Hồ sơ công khai

Gửi một tin nhắn tới QuangHoang

Tìm toàn bộ bài viết bởi QuangHoang

  #8  

06-02-2009, 05:03 PM

quangnh89 Thành viên nhiệt tình  

Ngày gia nhập: 11 2007Nơi ở: Hà NộiBài viết: 426

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ố vtvoid 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ố

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

đ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); }

quangnh89

Xem Hồ sơ công khai

Gửi một tin nhắn tới quangnh89

Tìm toàn bộ bài viết bởi quangnh89

  #9  

06-02-2009, 06:35 PM

thongnlkh_aptech Thành viên mới  

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

Trích dẫn:Nguyên bản được gửi bởi quangnh89 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ố vtvoid 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

thongnlkh_aptech

Xem Hồ sơ công khai

Gửi một tin nhắn tới thongnlkh_aptech

Tìm toàn bộ bài viết bởi thongnlkh_aptech

  #10  

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

06-02-2009, 07:06 PM

trubavuong Thành viên nhiệt tình  

Ngày gia nhập: 01 2009Nơi ở: Hà NộiBài viết: 206

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();

}