Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
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
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  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ông cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã đượ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