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ố 19 kết quả

Đề tài: tìm số lần xuất hiện của từ trong chuỗi

  1. #1
    Ngày gia nhập
    03 2007
    Bài viết
    10

    Smile tìm số lần xuất hiện của từ trong chuỗi

    các bạn hướng dẫn qua cho mình về cách tìm số lần xuất hiện của 1 từ trong 1 chuỗi được nhập vào. vd: chuỗi "con cho con can con meo con", tìm từ: "con".in ra: có 4 từ con trong chuỗi .
    Đã được chỉnh sửa lần cuối bởi dragoncl12 : 12-11-2007 lúc 08:58 PM.

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    Bạn tham khảo ở đây xem.Hy vọng giúp được bạn (Bạn hãy cố gắng tự phát triển nó lên): Đếm ra số ký tự giống nhau của một chuỗi

  3. #3
    Ngày gia nhập
    03 2007
    Bài viết
    10

    cám ơn bạn đã giúp, về việc kiểm tra kí tự thì mình ok rồi nhưng về cái việc xử lí từ mình nghĩ mãi chẳng ra cách giải quyết được.Mong các bạn giúp đỡ thêm.

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,760

    Về bài này có rất nhiều cách làm, nhưng sau đây Dr đưa ra một thuật toán rất đơn giản như sau:

    Giả sử ta cần tìm số lần xuất hiện chuỗi keyword="a1a2a3...an" trong chuỗi str="s1s2s3...sn" nào đó. Ta có thể làm như sau:

    - Tìm vị trí trong str xuất hiện ký tự a1 của chuỗi keyword
    - Tại mỗi vị trí xuất hiện ký tự a1 ta lấy ra một chuỗi có độ dài bằng độ dài của chuỗi keyword, lưu vào chuỗi temp.
    - Đồng thời so sánh chuỗi keyword với chuỗi temp ở trên, nếu trùng thì counter++;

    Bạn có thể dựa vào đây để phát triển hàm search được đó.

    Chúc thành công!
    Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.
    Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.

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

    Bạn tham khảo bài này nhé, đếm số kí tự trong 1 từ, còn đếm từ trong chuỗi thì để mình suy nghĩ lại xem nhé :
    Java Code:
    1. #include <iostream>
    2. #include <string>
    3.  
    4. #define maxx 100
    5.  
    6. char word[256];
    7. int alphaChar[maxx],
    8.     upperChar[maxx];
    9.  
    10. int main()
    11. {
    12.     /*Initialization*/
    13.       for ( int x = 0; x < 26; x++ )
    14.       {
    15.             alphaChar[x] = 0;
    16.             upperChar[x] = 0;
    17.       }
    18.      
    19.       cout << "\nUser enter a word [no space] : ";
    20.       cin >> word;
    21.      
    22.       cout << "\n\n\n";
    23.    
    24.       int w = 0;
    25.    
    26.       do
    27.       {
    28.             for(int index = 0; index < (strlen(word)); index++)
    29.             {
    30.                   if( word[index] == char(97 + w))
    31.                       alphaChar[w]++;
    32.                   else if ( word[index] == char(65 + w))
    33.                       upperChar[w]++;
    34.             }
    35.                  
    36.             w++;
    37.       }while ( w != 26 );
    38.              
    39.    
    40.    
    41.       for ( int i = 0; i < 26; i++ )
    42.       {
    43.             if ( upperChar[i] != 0 )
    44.                   cout << "the Char " << char(65 + i) << " occurences is : " << upperChar[i] << endl;
    45.             else if ( alphaChar[i] != 0 )
    46.                   cout << "the Char " << char(97 + i) << " occurences is :" << alphaChar[i] << endl;
    47.       }
    48.      
    49.       return 0;
    50. }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 08-12-2008 lúc 09:54 AM.

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Mặc định tìm số lần xuất hiện của từ trong chuỗi

    Nếu ko có cách nào hay thì cứ brute force thôi (làm như Dr) với độ phức tạp là O(n*m) n - chiều dài text, m - chiều dài pattern.

    Còn nếu muốn chạy nhanh hơn thì dùng KMP. Muốn vậy thì phải chịu khó nghiên cứu thôi.
    Keep moving forward!

    ... Retired ...

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

    Sorry Dragoncl12 ! Bữa h mới suy nghĩ ra, bạn thông cảm nhé ^^:

    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3. int main()
    4. {
    5.     char word[80];
    6.     char *sentence = "The real courage is when you've clicked before you begin, and you will get through no matter what";
    7.     cout << "Enter a word you want to seek : ";
    8.     cin >> word;
    9.        
    10.     char *stringPtr = word; /*pointer stringPtr points to the first element of word (i.e) "y" ( you for e.g) */
    11.     char *tmpPtr = sentence; /*pointer tmpPtr points to the first element of sentence (i.e) "T"*/
    12.        
    13.     char *VAR = NULL; /*Initialize pointer VAR points to NULL*/
    14.  
    15.     int occurence = 0;
    16.     int position;
    17.    
    18.     /*Take the length of the first word in sentence*/
    19.     int length = strlen(stringPtr);
    20.     cout << length << endl;
    21.     while(1)
    22.     {
    23.         /*strstr function returns a pointer to the first occurrence of "stringPtr" in "tmpPtr",
    24.           or a null pointer  if the "stringPtr" is not part of "tmpPtr".
    25.           The matching process does not include the terminating null-characters.*/
    26.         VAR = strstr (tmpPtr, stringPtr);
    27.         if( !VAR ) break; /*when this line is reached, "while loop" ends*/
    28.            
    29.         position = VAR - tmpPtr;    
    30.         tmpPtr += position + length; /*tmpPtr points to the first character after seeking word*/
    31.         occurence++;                 /*Increase its occurence*/
    32.     }
    33.        
    34.     cout << "The occurence of the word [" << word << "] is " << occurence;
    35.        
    36. }
    Cái chính là ta sử dụng hàm này "strstr" để lấy vị trí con trỏ của từ xuất hiện trong câu, mình có comment, bạn đọc sẽ hiểu ngay thôi ! Thân !

  8. #8
    Ngày gia nhập
    03 2007
    Bài viết
    10

    mình đang học mới [c] à ,chưa học c++ nên mình cũng chưa hiểu nhiều lắm nhưng dù sao cũng cảm ơn bạn rất nhiều ,nhất là cái bài đếm kí tự í , mình cũng đã giải ra bài này rồi cũng nhờ ý tưởng của bác Dreaminess đấy, nhưng mình ko hiểu sao lúc làm xong rồi chạy rất tốt ,nhưng đến chiều nó dở chứng chạy "chỉ đúng" bị lỗi với chuỗi "can con" tìm từ "con" là sai luôn , mình gửi bài lên cho các bác sửa hộ nhé.
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. #include <ctype.h>
    5. #include <math.h>
    6.  
    7. void main()
    8. {
    9.     clrscr();
    10.     char *s,*t,*q;
    11.     int i,j,dem=0,x=0,m=0,n,l,o=0;
    12.     printf ("\n nhap 1 chuoi:");
    13.     gets(s);
    14.     printf ("\n nhap 1 tu de kiem tra:");
    15.     gets(t);
    16.     strcpy(q,t);
    17.     strlwr(s);
    18.     strlwr(t);
    19.     for (l=0;l<=strlen(s);l++)
    20.     {
    21.         if (s[l]==' '||l==strlen(s))
    22.          {
    23.          if (l-o==strlen(t)&&s[o]==t[0])
    24.  
    25.         for (j=0,i=o;j<strlen(t)&&i<l;j++,i++)
    26.           {
    27.         if (s[i]==t[j])
    28.            {
    29.             q[m++]=t[j];
    30.             x++;
    31.            }
    32.            else
    33.         {
    34.             m=0;x=0;
    35.         }
    36.         }
    37.           if (x==strlen(t))
    38.             if (strcmp(q,t)==0)
    39.             {
    40.                 m=0;x=0;dem++;
    41.             }
    42.             else
    43.             {
    44.                 m=0;x=0;
    45.             }
    46.            o=l+1;
    47.            }
    48.     }
    49.     printf ("\n co %d tu`: %s",dem,t);
    50.  
    51. getch();
    52. }
    Đã được chỉnh sửa lần cuối bởi dragoncl12 : 25-11-2007 lúc 07:55 PM.

  9. #9
    Ngày gia nhập
    11 2007
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi dragoncl12 Xem bài viết

    C Code:
    1.     char *s,*t,*q;
    2.     int i,j,dem=0,x=0,m=0,n,l,o=0;
    3.     printf ("\n nhap 1 chuoi:");
    4.     gets(s);
    5.     printf ("\n nhap 1 tu de kiem tra:");
    6.     gets(t);
    -Lúc khai báo bạn chưa chỉ ra bộ nhớ cho xâu s mà chỉ mới khai báo con trỏ chỉ tới xâu s mà thôi nên lúc nhập vào sẽ bị lỗi.Bạn chỉ cần khai báo một vùng nhớ cho các xâu s,t,q là được ví dụ:s[100],t[100],q[100]
    -ở trước hàm gets(t) nên xóa bộ nhớ đệm bằng lệnh fflush(stdin)

  10. #10
    Ngày gia nhập
    03 2007
    Bài viết
    10

    ặc ặc, bạn đã chạy thử bài mình chưa và đúng cái chuỗi "can con" rồi tìm từ "con" ấy , nếu mà chạy được thì có lẽ trình borland c mình bị lỗi rồi. Mà công nhận thấy cái lỗi đúng bực kiểm tra với mấy cái chuỗi khác thì đúng,còn với cái chuỗi "can con" là lộn máu.
    Đã được chỉnh sửa lần cuối bởi dragoncl12 : 25-11-2007 lúc 09:57 PM.

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

  1. Lập trình C++ Mình muốn hỏi về bài toán tìm số lần xuất hiện của ký tự nhiều nhất trong chuỗi và số lần xuất hiện
    Gửi bởi ducky trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 06-09-2013, 11:17 AM
  2. Mảng trên C Chuỗi con xuất hiện vị trí thứ bao nhiêu trong chuỗi mẹ
    Gửi bởi hjepsjga_94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 22-07-2013, 06:49 PM
  3. Bị lỗi dính chuỗi khi nhập xuất chuỗi từ file trong C++?
    Gửi bởi nguyenchikhang trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 3
    Bài viết cuối: 03-11-2011, 03:13 PM
  4. Turbo C Lỗi Nhập một chuỗi và 1 từ cho biết từ đó xuất hiện trong chuỗi bao nhiêu lần?
    Gửi bởi vietvinhqn1992 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: 17-01-2011, 12:38 PM
  5. Nhập chuỗi, đếm số lần xuất hiện các từ trong chuỗi như thế nào?
    Gửi bởi VizDee trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 23-01-2010, 01:33 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