Mọi người đâu hết rồi, giúp tớ bài này cái...
Đặt ra là kiểm tra chuỗi 1 có nằm trong chuỗi 2 hay không...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; }
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.
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.
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.
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.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] ) {} return 0;i = k+1; j = 1; while ( subStr[j] && (subStr[j] == str[i])) {if ( !subStr[j] ) return 1; }i++; j++;}
Sao cái tab CODE khó điều khiển nhỉ.
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.
tên hiệp gà này ra vẻ gớm nhỉ , pro quá , khì khì
Cái này chắc là nhanh hơnCode:#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(); }
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.tên hiệp gà này ra vẻ gớm nhỉ , pro quá , khì khì
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!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!)
sao mỗi lần sửa lại phải thêm 10 ky tự thế nhỉ ?Nguyên bản được gửi bởi buianhtuanhn
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 ý.