Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Kiểm tra chuỗi đối xứng. Sai khi nhập chuỗi 3 ký tự, còn lại đúng. Ai xem giúp mình với

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    5

    Wink Kiểm tra chuỗi đối xứng. Sai khi nhập chuỗi 3 ký tự, còn lại đúng. Ai xem giúp mình với

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. main()
    5. {
    6.     char ch[50];
    7.     int i,j;
    8.     printf("\nNhap chuoi: ");
    9.     gets(ch);
    10.     int n=strlen(ch)-1;
    11.     int k=0;    
    12.     for(i=0,j=n;i<n,j>0;i++,j--){
    13.         if(ch[i]==ch[j])
    14.             k=0;
    15.         else
    16.             k=1;
    17.     }
    18.     if(k==0)
    19.         printf("\nChuoi doi xung");
    20.     else
    21.         printf("\nChuoi ko doi xung");
    22.     getch();
    23. }

    Nhập các chuỗi khác thì đúng hết. Riêng với trường hợp nhập 3 ký tự thì sai.
    Mọi người xem rồi giải thích giúp mình nhé. Thanks

  2. #2
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nội
    Bài viết
    381

    bạn sửa như thế này:
    C Code:
    1. for(i=0,j=n;i<=n/2,j>n/2;i++,j--)

    skype: hvphu2010
    Yahoo: hvphu2010
    Sdt: 0129 609 4567

  3. #3
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    C Code:
    1. for(i=0;i<n/2;i++)
    2. {
    3.    if(a[i]!=a[n-i-1])
    4.    {
    5.       flag = 0 ;
    6.       break ;
    7.     }
    8. }

    ngắn gọn hơn.
    HT117-5277

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Code trên thực ra sai cho tất cả các chuỗi chứ không riêng gì chuỗi 3 ký tự. Vì bạn chưa chạy đủ kiểu nên chưa thấy thôi.

    Lý do:

    C Code:
    1.     for(i=0,j=n;i<n,j>0;i++,j--){
    2.         if(ch[i]==ch[j])
    3.             k=0; // gặp kt đối xứng, k sẽ bị reset lại thành 0, trường hợp không đối xứng trước đó bị overwritten
    4.         else
    5.             k=1;
    6.     }
    7.  
    8. // sửa lại code theo gia chủ:
    9.  
    10.     for(i=0,j=n; j > i; i++,j--){ // chỉ cần tính lúc j > i thôi
    11.         if(ch[i]!=ch[j])
    12.             k=1;
    13.     }
    14.  
    15. // code hiệu quả hơn cho chuỗi dài, không cần phải dùng biến k
    16.  
    17.     for(i=0, j=strlen(ch)-1; j > i; i++, j--)
    18.         if(ch[i]!=ch[j]) break;
    19.     if (j > i) // chuỗi không đối xứng vì thoát ra vòng lặp sớm

  5. #5
    Ngày gia nhập
    08 2011
    Bài viết
    5

    hi, hiểu rùi. Cảm ơn mọi người nhiều
    Bây giờ mới hiểu cái "break" :P. Ngoài việc dừng câu lệnh ở trên nó ra, thì nó còn tác dụng gì ko mọi người ? Ngu quá, chỉ bít dùng khi sử dụng "switch" ^^

    Mọi người ơi, lại giúp mình lần nữa ^^
    Cũng chuỗi đối xứng này, nhưng là viết hàm kiểm tra. Mà nó toàn in ra ko đối xứng thui
    Mới học hàm nên chưa hiểu :P
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. int ktra();
    5. int ktra(){
    6.     char s[50];
    7.     int i,j;
    8.     int kt=0;
    9.     for(i=0,j=strlen(s)-1;j>i;i++,j--){
    10.         if(s[i]!=s[j]){
    11.             kt=1;
    12.             break;
    13.         }
    14.     }
    15.     return kt;
    16. }
    17. main(){
    18.     char s[50];
    19.     int kt;
    20.     printf("\nNhap chuoi: ");
    21.     gets(s);
    22.     ktra();
    23.     if(kt==0) printf("\nChuoi doi xung");
    24.     else printf("\nChuoi ko doi xung");
    25.     getch();
    26. }
    Thanks mn nhìu nhìu

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

    Mặc định Kiểm tra chuỗi đối xứng. Sai khi nhập chuỗi 3 ký tự, còn lại đúng. Ai xem giúp mình với

    Mới học hàm thì học cho kỹ về phạm vi của biến

    Hàm của bạn tự kiểm tra chuõi của riêng nó chứ có kiểm tra chuỗi nhập vào đâu.

  7. #7
    Ngày gia nhập
    08 2011
    Bài viết
    5

    Thanks bạn nhìu..................
    Đã được chỉnh sửa lần cuối bởi Shock0z : 22-10-2011 lúc 12:57 PM.

  8. #8
    Ngày gia nhập
    10 2011
    Nơi ở
    TP.HCM
    Bài viết
    115

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Code trên thực ra sai cho tất cả các chuỗi chứ không riêng gì chuỗi 3 ký tự. Vì bạn chưa chạy đủ kiểu nên chưa thấy thôi.

    Lý do:

    C Code:
    1.    
    2.  
    3. // code hiệu quả hơn cho chuỗi dài, không cần phải dùng biến k
    4.  
    5.     for(i=0, j=strlen(ch)-1; j > i; i++, j--)
    6.         if(ch[i]!=ch[j]) break;
    7.     if (j > i) // chuỗi không đối xứng vì thoát ra vòng lặp sớm
    if(ch[i]!=ch[j]) break;
    if (j > i) // chuỗi không đối xứng vì thoát ra vòng lặp sớm
    Cái này ai có thể giải thích rõ hơn cho mình đc koh?
    THIẾT KẾ WEBSITE CHUẨN SEO - GIÁ RẺ - CHẤT LƯỢNG - UY TÍN : webdepgiasoc.com

  9. #9
    Ngày gia nhập
    10 2011
    Nơi ở
    TP.HCM
    Bài viết
    115

    C Code:
    1.  static void Main(string[] args)
    2.         {
    3.            
    4.             string chuoi="";
    5.             Console.Write("Nhap vao 1 chuoi:");
    6.             chuoi = Console.ReadLine();
    7.             char[] n = chuoi.ToCharArray();
    8.             int dau = 0;
    9.             int cuoi = n.Length - 1;
    10.             while(dau<cuoi)
    11.             {
    12.                 dau++;
    13.                 cuoi--;
    14.                 if (n[dau] == n[cuoi])
    15.                 {
    16.                    
    17.                     Console.Write("Chuoi doi xung");
    18.                     Console.ReadLine();
    19.                 }
    20.                 else
    21.                 {
    22.                     Console.Write("Chuoi Ko doi xung");
    23.                     Console.ReadLine();
    24.                     break;
    25.                 }
    26.             }//end while
    [/QUOTE]
    Mình hiểu và viết như vầy.Nhưng ko hiểu sao.Nhập chuỗi khác thì đúng.Chứ nhập chuỗi ABCDECBA or 1234BE4321 Nó cứ bào ra là đối xứng.Ai giải thích giúp mình đc koh???
    THIẾT KẾ WEBSITE CHUẨN SEO - GIÁ RẺ - CHẤT LƯỢNG - UY TÍN : webdepgiasoc.com

  10. #10
    Ngày gia nhập
    10 2011
    Bài viết
    554

    Trích dẫn Nguyên bản được gửi bởi namnguyen1251 Xem bài viết
    C Code:
    1.  static void Main(string[] args)
    2.         {
    3.            
    4.             string chuoi="";
    5.             Console.Write("Nhap vao 1 chuoi:");
    6.             chuoi = Console.ReadLine();
    7.             char[] n = chuoi.ToCharArray();
    8.             int dau = 0;
    9.             int cuoi = n.Length - 1;
    10.             while(dau<cuoi)
    11.             {
    12.                 dau++;
    13.                 cuoi--;
    14.                 if (n[dau] == n[cuoi])
    15.                 {
    16.                    
    17.                     Console.Write("Chuoi doi xung");
    18.                     Console.ReadLine();
    19.                 }
    20.                 else
    21.                 {
    22.                     Console.Write("Chuoi Ko doi xung");
    23.                     Console.ReadLine();
    24.                     break;
    25.                 }
    26.             }//end while
    Mình hiểu và viết như vầy.Nhưng ko hiểu sao.Nhập chuỗi khác thì đúng.Chứ nhập chuỗi ABCDECBA or 1234BE4321 Nó cứ bào ra là đối xứng.Ai giải thích giúp mình đc koh???
    Thuật toán của bạn bỏ qua 2 điểm mút n[0] và n[length-1] .
    Thuật toán của bạn in ra 1 tràng "Chuoi doi xung" cho đến lúc nào nó ko đối xứng nữa thì out

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

  1. Sắp xếp 4 số a,b,c,d nhập từ bàn phím không dùng mảng chuỗi. Xem giúp code đúng không?
    Gửi bởi vu159951 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 16-11-2012, 11:34 AM
  2. Mình cần giúp đỡ về cắt chuỗi và tìm chuỗi dài nhất
    Gửi bởi washabi trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 20-08-2012, 08:50 AM
  3. Lập trình C Kiểm tra đúng/sai của chuỗi người dùng nhập vào từ bàn phím trong C?
    Gửi bởi n0b0dy.n0l0v3 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: 19-09-2011, 12:56 PM
  4. ADO.NET Xác minh chuỗi ký tự nhập vào chương trình đến khi đúng thì viết thế nào??
    Gửi bởi vudat0987 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 27-08-2011, 01:49 PM
  5. Trả lời: 1
    Bài viết cuối: 29-06-2011, 12:02 AM

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