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

Đề tài: Đếm từ trong 1 chuỗi

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Mặc định Đếm từ trong 1 chuỗi

    Code:
    #include <stdio.h>
    #include <conio.h>
    int strlen(char *chuoi);
    char chuoi[50] ;
    int i,count=0;
    void main()
    {
    clrscr();
    
    printf ("Nhap vao mot chuoi:");
    gets(chuoi);
    
    
    for(i=0;i<strlen(chuoi);i++)
    
    
    {
    if(chuoi[i]==' '&&chuoi[i+1]!=' ')
    count++;
    }
    
    printf ("Vay chuoi co %d tu",count);
    
    getch();
    }
    
    
    
    /*Dinh nghia ham strlen*/
    
    
    int (char *chuoi)
    {
     int i,count;
    
     for(i=0;chuoi[i]!='\0';i++)
    
     count++;
    
     return count;
    
    
     }

    Cho em hỏi đoạn code của em bị sai đoạn nào vậy

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi kegiaumat055 Xem bài viết
    Code:
    for(i=0;i<strlen(chuoi);i++)
    {
    if(chuoi[i]==' '&&chuoi[i+1]!=' ')
    count++;
    }
     }

    Cho em hỏi đoạn code của em bị sai đoạn nào vậy
    - Giả sử chiều dài chuỗi sau khi hàm strlen được gọi trả về là n (tất nhiên là đã loại ký tự "\0").
    - Bạn sử dụng vòng lặp đi từ 1 đến n ký tự của chuỗi đúng không?
    - Khi i đi đến n thì vào vòng lặp bị lỗi: vì bạn sử dụng if(chuoi[i]==' ' && chuoi[i+1]!=' '). Bạn thấy sai ở chỗ đánh dấu không. Đến n là hết rồi, không có n+1.
    Không biết ghi gì luôn ...

  3. #3
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Nó vẫn báo lỗi là:Declaration terminated incorrecty ở dòng
    Code:
    int (char *chuoi)

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Bó tay bạn luôn , khi định nghĩa hàm strlen bạn thiếu tên hàm kìa. ^_^

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

    Thứ nhất là mình khuyên bạn nên dùng biến cục bộ , đừng nền dùng biến toàn cục như vậy(chắc chắn sẽ sai nếu cout<<count) .còn hàm đó sai là do bạn quên đặt tên hàm ,int chỉ là định nghĩa kiểu trả về của hàm.

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Mặc định Đếm từ trong 1 chuỗi

    Đúng rồi,em sơ ý quá.Nhưng mà khi em nhập chuỗi thì nó báo số từ không chính xác
    VD:
    Em nhập:Quách Tuấn nguyên thì nó báo 5 từ
    Em nhập :Tôi là ai vậy thì nó báo 7 từ

  7. #7
    Ngày gia nhập
    04 2008
    Bài viết
    20

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    void main()
    {
    	int i,count=0;
    	char chuoi[50] ;
    
    	printf ("Nhap vao mot chuoi:");
    	fflush(stdin);
    	gets(chuoi);
    	for(i = 0;i < strlen(chuoi);i++)
    	{
    		if(chuoi[i] == ' ' && chuoi[i+1] != ' ')
    		count++;
    	}
    	printf ("Vay chuoi co %d tu",count + 1);
    	getch();
    }

  8. #8
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    C Code:
    1.  if(chuoi[i] == ' ' && chuoi[i+1] != ' ')
    Vậy nhỡ nếu từ kế là dấu , hoặc ! thì sao ? hoặc có 3 spaces chẳng hạn. Mở rộng cho nó toàn diện luôn đi cậu reaper !

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    code c# , tách từ , lược đầu, lược cuối , lược nhiều ký tự có trong string chuỗi (không phải chỉ mỗi dấu cách, cải biên thành c chắc được .
    Mọi người cho ý kiến về code này cái
    Code:
    string chuoi = " ,.;:?_<>(){}[]\r\n\t", tam, nghia;
            bool KiemTra(char c)
            {
                for (j = 0; j < chuoi.Length; j++)
                    if (c == chuoi[j]) return true;
                return false;
            }
            public void TachTu(string s)
            {
                //tách các từ cho vào mảng
                dem = 0;
                truoc = -1;
                if (s == "") return;
                for (i = 0; i < s.Length; i++)
                {
                    if (KiemTra(s[i]))
                    {
                        if (i - truoc > 1)
                        {
                            tu[dem] = s.Substring(truoc + 1, i - truoc - 1);
                            vitri[dem] = truoc + 1;
                            dem++;
                            if (dem >= vitri.Length)
                                break;
                        }
                        truoc = i;
                    }
                }
                if (!KiemTra(s[s.Length - 1]) && (i - truoc > 1) && dem < vitri.Length)
                {
                    tu[dem] = s.Substring(truoc + 1, i - truoc - 1);
                    vitri[dem] = truoc + 1;
                    dem++;
                }
    }
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Dùng C string có lẽ phải dùng pointer để implement sẽ dễ dàng hơn dùng truy xuát như array, em thấy code C# có rất nhiều hàm dùng sẵn cho string, tương tự như C++, nếu dùng hết thì T_T...Còn C string là pure char* nên viết chắc sẽ cực hơn nhiều, cụ thể nó sẽ không có hàm substr. Em đã thử tìm 1 kí tự, còn việc có () [] hoặc cái này thì chắc phải phức tạp hơn 1 tí, hoặc 2-3 spaces gì đó.
    C Code:
    1. #include <cstdio>
    2.  
    3. const int MaxChar = 100;
    4. const int MaxWord = 100;
    5.  
    6. /*
    7.   - function prototype
    8. */
    9. char* strcat(char* str1, char* str2);
    10. bool is_token(char c, const char* tokens);
    11. void print_string(char words[][MaxChar], const int& number_of_words);
    12. char* strcpy(char* lhs, const char* rhs);
    13. void get_string(char str[], unsigned len);
    14. void cut_string_put_to_container(char *str, char container[][MaxChar],
    15.                                  int& number_of_words, const char *token_set);
    16. unsigned strlen(const char* str);
    17.  
    18.  
    19. int main(){
    20.   const char* token_set = " :,.;:!";
    21.   char words[MaxWord][MaxChar];
    22.   int index[MaxWord];
    23.   char str[MaxChar];// = "Real courage is,when you know you're cliked before you begin";
    24.   get_string(str, MaxChar - 1);
    25.   int number_of_words;
    26.   cut_string_put_to_container(str, words, number_of_words, token_set);
    27.   printf("\nNumber of words in string = %d \n\n", number_of_words);
    28.   print_string(words, number_of_words);
    29.   return 0;
    30. }
    31.  
    32. bool is_token(char c, const char* tokens){
    33.   char* q = const_cast<char* >(tokens);
    34.   for(;*q != '\0'; ++q){
    35.     if(c == *q){
    36.       q = NULL;
    37.       return true;
    38.     }
    39.   }
    40.   return false;
    41. }
    42.  
    43. void print_string(char words[][MaxChar], const int& number_of_words){
    44.   for(int x = 0; x < number_of_words; ++x){
    45.     printf("%s \n", words[x]);
    46.   }
    47. }
    48.  
    49. char* strcpy(char* lhs, const char* rhs){
    50.   const char *p;
    51.   char *q;
    52.   for(p = rhs, q = lhs; *p != '\0'; p++, q++)
    53.     *q = *p;
    54.   *q = '\0';
    55.   return lhs;
    56. }
    57.  
    58. void cut_string_put_to_container(char *str, char container[][MaxChar],
    59.                                  int& number_of_words, const char *token_set){
    60.   char word[MaxChar] = {};
    61.   char hold[2];
    62.   int count = 0;
    63.   for(int i = 0; i < strlen(str); ++i){
    64.     if(!is_token(str[i], token_set)){
    65.       hold[0] = str[i];
    66.       strcat(word, hold);
    67.     }
    68.     else{
    69.       strcpy(container[count], word);
    70.       word[0] = 0;
    71.       count++;
    72.     }
    73.   }
    74.   strcpy(container[count], word);
    75.   number_of_words = ++count;
    76. }
    77.  
    78. unsigned strlen(const char* str){
    79.   unsigned l = 0;
    80.   for(; *str != '\0'; ++str)
    81.     ++l;
    82.   return l;
    83. }
    84.  
    85. char* strcat(char* str1, char* str2){
    86.   while(*str1)
    87.     str1++;
    88.   while(*str1++ = *str2++);
    89.   return --str1;
    90. }
    91. //Type-safe instead of using gets()
    92. void get_string(char str[], unsigned len){
    93.   int toke,
    94.       x = 0;
    95.   while((toke = getchar()) != EOF && toke != '\n'){
    96.     str[x++] = toke;
    97.     if(x == len){
    98.       printf("...over size.\n");
    99.       return;
    100.     }
    101.   }
    102.   str[x] = '\0';
    103. }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 14-04-2008 lúc 06:25 AM.

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

  1. Lập trình C Thay thế chuỗi s1 trong chuỗi s bằng chuỗi s
    Gửi bởi duytue trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 23-09-2011, 04:16 PM
  2. thay thế chuỗi con thứ i trong chuỗi mẹ bằng 1 chuỗi khác
    Gửi bởi nhat1811 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 06-08-2011, 08:25 AM
  3. Trả lời: 1
    Bài viết cuối: 29-06-2011, 12:02 AM
  4. Trả lời: 7
    Bài viết cuối: 21-03-2011, 09:59 PM
  5. xem một từ trong chuỗi là một chuỗi con, sắp xếp các chuỗi con theo thứ tự tăng dần
    Gửi bởi qpkdct1101 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-01-2011, 08:22 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