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

Đề tài: Help! Bài tập đếm số chữ cái khác nhau có trong chuỗi!

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    Wink Help! Bài tập đếm số chữ cái khác nhau có trong chuỗi!

    Đề bài : đếm số chữ cái khác nhau có trong chuỗi.
    Ý tưởng :
    -Đọc chữ cái đầu, đem ss với tất cả các chữ cái còn lại,nếu khác thì ss chữ cái đó với chữ cái tiếp, nếu giống thì loại những chữ đó ra. Sau đó loại lun cả chữ cái này, vì đã ktra hết rồi.
    -Tăng giá trị số chữ cái khác nhau lên.
    -Sau đó chuyển qua chữ cái tiếp để làm tương tự( điều kiện là xem chữ cái này đã loại hay chưa) cho đến khi hết chữ cái.

    Code đã viết, ko báo lỗi nhưng cho gái trị ko đúng :
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4.  
    5. int ktra(char arr[]);
    6. int B[100];
    7.  
    8. main()
    9. {
    10.       char str_arr[5];
    11.       gets(str_arr);
    12.       printf("Do dai chuoi da nhap :%d",strlen(str_arr));
    13.       printf("\nSo chu cai co trong chuoi : %d",ktra(str_arr));
    14.       getch();
    15. }
    16.  
    17. int ktra(char arr[])
    18. {
    19.      int n=0;
    20.              for(int i=0;i<strlen(arr);i++)
    21.              {        
    22.                       if(B[i]==0)  
    23.                          for(int j=0;j<strlen(arr);j++)
    24.                              if((B[j]==0) &&(arr[i]==arr[j]) && (j!=i))
    25.                              {    
    26.                                  B[j]=1;
    27.                              }    
    28.                          n++;
    29.                          B[i]=1;
    30.              }
    31.              return n;
    32. }
    -Giúp mình sửa và giải thích lun nha . Đầu tiên hãy sửa code mình, sau đó nếu muốn hãy đưa ra code tối ưu cho bài này nếu bạn có thể

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    C Code:
    1. int ktra(char arr[])
    2. {
    3.     for(int k=0; k<100; k++)
    4.     {
    5.         B[k] = 0;
    6.     }
    7.      int n=0;
    8.      for(int i=0;i<strlen(arr);i++)
    9.      {        
    10.               if(B[i]==0)
    11.                  for(int j=0;j<strlen(arr);j++)
    12.                      if((B[j]==0) &&(arr[i]==arr[j]) && (j!=i))
    13.                      {    
    14.                          B[j]=1;
    15. //nếu arr[j] này đã có trong chuổi thì giảm nó đi 1 vì ra ngoài, thằng n luôn
    16. // luôn tăng lên cho dù đã có hay chưa => nó luôn return về độ dài của chuổi.
    17. // vì vậy phải thêm thằng này vào.
    18.             n--; // thêm chổ này nè.
    19.                      }    
    20.                  n++;
    21.                  B[i]=1;
    22.      }
    23.      return n;
    24. }

    bạn thử lại xem nó chạy đúng chưa.
    do mới cài lại máy nên chưa cài vc. bạn test lại thử đúng ko nhé.

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    AYS 107
    Bài viết
    41

    Trích dẫn Nguyên bản được gửi bởi camping29 Xem bài viết
    Đề bài : đếm số chữ cái khác nhau có trong chuỗi.
    .......................
    -Giúp mình sửa và giải thích lun nha . Đầu tiên hãy sửa code mình, sau đó nếu muốn hãy đưa ra code tối ưu cho bài này nếu bạn có thể
    Ý tưởng cho những bài kiểu này: Sao không sắp xếp qua tí rồi hẵng đếm nhỉ????
    Thuật toán sắp xếp có rất nhiều và cũng đã nói rất nhiều trong diễn đàn mình rồi!! Mính không viết lại ở đây nữa. Bây giờ coi như đã có một mảng các kí tự đã sắp xếp, đếm số kí tự khác nhau, có lẽ không quá phức tạp như trên đâu!!

    C Code:
    1. int count(char *s)
    2. {
    3.   int i,j,k;
    4.   i=j=0;
    5.   while(s[i]!='\0'){
    6.     j++;
    7.     k=s[i];
    8.     while(s[i]==k)
    9.       i++;
    10.   }
    11.   return j;
    12. }
    I don't wanna waste another day

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Bài này có nhiều cách. Nếu chỉ đếm chữ cái không thì ý tưởng của tui là thế này:

    Kiểm tra xem trong chuỗi 26 chữ cái Alphabet so sánh từng chữ 1 từ A đến Z xem có trong chuỗi cần đếm hay không? Nếu có tăng biến đếm.

    C Code:
    1. int count_char(char *s)
    2. {
    3.     int count = 0;
    4.     char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    5.  
    6.     strupr(s);
    7.     for (int i = 0; alphabet[i] != NULL; ++i) {
    8.         if (strchr(s, alphabet[i]))
    9.             ++count;
    10.     }
    11.     return count;
    12. }

    Còn cách khác có thể là duyệt từ đầu đến cuối chuỗi cần đếm, với mổi chữ cái ta duyệt lại những chữ cái phía trước nó xem có bị trùng với chữ cái ta đang dừng lại duyệt hay không? Nếu không trùng thì tăng biến đếm. Lưu ý ở đây là cần phân biệt chữ cái với ký tự khác. Các cách của những bạn phía trên hình như sẽ đếm luôn cả những ký tự khác như khoảng trắng, các dấu câu v.. v...
    /* The thing that I think is the thing that I do. */

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

    Trích dẫn Nguyên bản được gửi bởi camping29 Xem bài viết
    Code đã viết, ko báo lỗi nhưng cho gái trị ko đúng :
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4.  
    5. int ktra(char arr[]);
    6. int B[100]; //nên khởi tạo cho tất cả các phần tử = 0 trước.
    7.  
    8. main()
    9. {
    10.       char str_arr[5]; // Tiết kiệm quá xá!
    11.       gets(str_arr);
    12.       printf("Do dai chuoi da nhap :%d",strlen(str_arr));
    13.       printf("\nSo chu cai co trong chuoi : %d",ktra(str_arr));
    14.       getch();
    15. }
    16.  
    17. int ktra(char arr[])
    18. {
    19.      int n=0;
    20.              for(int i=0;i<strlen(arr);i++)
    21.              {        
    22.                       if(B[i]==0)  
    23.                          for(int j=0;j<strlen(arr);j++)
    24.                              if((B[j]==0) &&(arr[i]==arr[j]) && (j!=i))  // Đã chắc chắn arr[i] là chữ cái chưa? Có phân biệt chữ thường chữ hoa ko?
    25.                              {    
    26.                                  B[j]=1;
    27.                              }
    28. // Xem 2 lệnh sau có nhằm trong cặp { } nào không?
    29.                          n++;
    30.                          B[i]=1;
    31.              }
    32.              return n;
    33. }
    -Giúp mình sửa và giải thích lun nha . Đầu tiên hãy sửa code mình, sau đó nếu muốn hãy đưa ra code tối ưu cho bài này nếu bạn có thể
    Đây là code "tối ưu" của tớ, cách nghĩ ngược lại với Chautieu47 và không cần phải xài strchr trong vòng for.
    C Code:
    1. //////////////////////////////////////////////////////////////////////////////////////
    2. //  Đề bài : đếm số chữ cái khác nhau có trong chuỗi.
    3. //  http://forums.congdongcviet.com/showthread.php?t=9191
    4. //  (c) Berberin
    5.  
    6.  
    7. //////////////////////////////////////////////////////////////////////////////////////
    8. #include <stdio.h>
    9. #include <stdlib.h>
    10. #include <memory.h>
    11. #include <ctype.h>
    12.  
    13. //////////////////////////////////////////////////////////////////////////////////////
    14. int main(){
    15.     char S[100]; //Input
    16.     char c; // xài tạm
    17.     bool M['Z'-'A'+1]; // 26 phần tử, để đánh dấu xem chữ cái đã được xét chưa (không phân biệt hoa/thường)
    18.     unsigned Count = 0; //Output
    19.    
    20.     // Khởi tạo
    21.     printf("S = "); gets(S);
    22.     memset(M, false, sizeof(M));
    23.    
    24.     // Đếm
    25.     for (int i = 0; S[i]; i++)
    26.         if (isalpha(S[i])){
    27.             c = toupper(S[i])-'A';
    28.             if (!M[c]){
    29.                 M[c] = true;
    30.                 Count++;
    31.             }
    32.         }
    33.    
    34.     // Kq
    35.     printf("Count = %d \n", Count);
    36.  
    37.     system("pause");
    38.     return EXIT_SUCCESS;
    39. }
    40. //////////////////////////////////////////////////////////////////////////////////////

    Ví dụ
    Code:
    S = Hello the World!!
    Count = 8
    Press any key to continue . . .
    Đã được chỉnh sửa lần cuối bởi Berberin : 25-08-2008 lúc 03:06 PM. Lý do: thêm nxets

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    Mặc định Help! Bài tập đếm số chữ cái khác nhau có trong chuỗi!

    To zkday2686: Thx a lot, code bạn sửa dựa trên code mình thì chạy tốt rồi.

    To developer : code bạn chạy tốt , nhưng mình đọc mãi thì mới hiểu đc, mình nghĩ là hơi lạ với dân mới lập trình như mình, hì, dù sao cũng cảm ơn.

    To Chautieu47: thx, ý mình ở đây mở rộng hơn về đếm các kí tự hơn là chữ cái.Dù sao thì cũng thx về bài đếm chữ cái .

    TO Berberin: mình chỉ mới học C thôi , bạn viết cái ji ji cao siu quá chẳng hỉu :(.Dù sao cũng thx vè đã đóng góp

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

  1. Lệnh so sánh 2 chuổi giống nhau trong C# như thế nào?
    Gửi bởi taka_12x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 12
    Bài viết cuối: 03-10-2013, 07:40 PM
  2. Bài tập C++ Cách để so sánh 2 chuỗi kí tự giữa chuỗi nhập từ phím và chuỗi từ file xem có giống nhau không?
    Gửi bởi davilson18 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 09-06-2012, 09:47 AM
  3. Tạo 2 chuỗi random khác nhau trong ASP.NET
    Gửi bởi luxubu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 15-04-2012, 04:04 PM
  4. Sự khác nhau giữa 2 cách khởi tạo chuỗi trong C++?
    Gửi bởi phuchaontu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 04-02-2012, 10:58 PM
  5. So Sánh 2 Chuỗi Trong 2 Textbox có độ dài ký tự khác nhau!
    Gửi bởi phanthuonghoai trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 04-06-2011, 08:17 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