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

Đề tài: [C] Kiểm tra chuỗi trong chuỗi

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

    Mặc định [C] Kiểm tra chuỗi trong chuỗi

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <malloc.h>
    
    int kiemtrachuoi(char [],char []);
    
    int main()
    {
            char s1[255];
            char s2[255];
       int kq;
    
       clrscr();
       printf("Nhap chuoi thu nhat:");
       gets(s1);
       printf("Nhap chuoi thu hai:");
       gets(s2);
    
       kq = kiemtrachuoi(s1,s2);
       if(kq==1)
       {
            printf("Chuoi 1 da xuat hien o chuoi thu 2:");
       }
       else if(kq==0)
       {
            printf("Chuoi 1 khong xuat hien o chuoi thu 2:");
       }
    
       getch();
            return 0;
    
    }
    
    int kiemtrachuoi(char s1[],char s2[])
    {
            int i,j=0;
       int t=0;
    
       for(i=0;s1[i]!=0;i++)
       {
                    t++;
       }
    
       for(i=0;s2[i]!=0;i++)
       {
            if(s2[i]==s1[j])
          {
            j++;
             if(j==t)
             {
                    return 1;
             }
          }
          else if(s2[i]!=s1[j])
          {
            j=0;
             if(i!=0)
             {
                    i--;
             }
          }
       }
       return 0;
    }
    Đặt ra là kiểm tra chuỗi 1 có nằm trong chuỗi 2 hay không...
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  2. #2
    Ngày gia nhập
    10 2006
    Bài viết
    107

    Mọi người đâu hết rồi, giúp tớ bài này cái...
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Bài trên của bạn sai rồi.

    Bạn thử trường hợp s1 = ababc, s2 = abababc sẽ thấy ngay. Trong trường hợp này j được reset bằng 0 khi i = 4. Rõ ràng là hàm đó trả về giá trị 0 ( đúng ra phải là 1 ).

    Đây là lời giải dễ hiểu nhất.
    Code:
    int strstr(const char * subStr, const char * str)
    {
    int i, j, k = 0; if ( !subStr[0] ) return 1; // if subStr is empty, allways be contained if ( !str[0] ) return 0; // if str is empty, allways do not contain for (; str[k]; k++) {
    if ( str[k] == subStr[0] ) {
    i = k+1; j = 1; while ( subStr[j] && (subStr[j] == str[i])) {
    i++; j++;
    }
    if ( !subStr[j] ) return 1; }
    } return 0;
    }
    Còn muốn có code tối ưu hơn thì tôi biết có 1 thuật toán sử dụng Automat đấy.

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Sao cái tab CODE khó điều khiển nhỉ.

  5. #5
    Ngày gia nhập
    10 2006
    Bài viết
    107

    Cảm ơn bạn nha, mình ra rồi hóa ra ở chỗ cái k đó cần thêm 1 biến trung gian i nữa.
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  6. #6
    No Avatar
    Yudayang Khách

    Mặc định [C] Kiểm tra chuỗi trong chuỗi

    tên hiệp gà này ra vẻ gớm nhỉ , pro quá , khì khì

  7. #7
    No Avatar
    buianhtuanhn Khách

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    void main()
    {
    	char str1[255], str2[255];
    	bool test;
    	printf ("Nhap chuoi thu nhat:");
    	flushall();
    	gets(str1);
    	printf ("Nhap chuoi thu hai: ");
    	flushall();
    	gets(str2);
    	bool = strstr(str1,str2);
    	if (bool ==1)
    	printf ("Chuoi thu hai co trong chuoi thu nhat");
    	else printf ("Chuoi thu 2 khong co trong cuoi thu nhat");
    	getch();
    }
    Cái này chắc là nhanh hơn

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

    tên hiệp gà này ra vẻ gớm nhỉ , pro quá , khì khì
    Yuahang lưu ý câu trả lời của mình nhé, vui lòng lịch sự trong khi reply chứ đừng có như kiểu chat. Cảm ơn bạn nhiều.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    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!

  9. #9
    No Avatar
    buianhtuanhn Khách

    Trích dẫn Nguyên bản được gửi bởi buianhtuanhn
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    void main()
    {
    	char str1[255], str2[255];
    	bool test;
    	printf ("Nhap chuoi thu nhat:");
    	flushall();
    	gets(str1);
    	printf ("Nhap chuoi thu hai: ");
    	flushall();
    	gets(str2);
    	bool = strstr(str1,str2);
    	if (test ==1)
    	printf ("Chuoi thu hai co trong chuoi thu nhat");
    	else printf ("Chuoi thu 2 khong co trong cuoi thu nhat");
    	getch();
    }
    Cái này chắc là nhanh hơn
    sao mỗi lần sửa lại phải thêm 10 ky tự thế nhỉ ?

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    Me Tri Ha - Ha Noi
    Bài viết
    19

    trời ạ, ông dùng luôn hàm strstr() của C thì còn nói làm gì nữa.
    vấn đề là ông tự viết một hàm như strstr() của C ý.

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