cám ơn bạn nhiểu hen cách của bạn trong có vẻ ngắn gọn và dễ hiểu wá.
Mình chạy bằng DEV c++ cũng có lỗi như vậy nhưng mà chịu không tài nào tìm ra lỗi được trong bài cậu.code viết khó đọc quá.Nhất là ký hiệu.
mình viết lại bài này đây:Trong bài này còn phân biệt chữ hoa với chữ thường ,nếu muốn không phân biệt thì cậu tự thêm vào nhé.
C Code:
#include<stdio.h> #include<conio.h> #include<string.h> main() { char s[100],test[100],temp[100]; int i=0,j=0,dem=0; { if( (i-1<0||s[i-1]==' ') && s[i]!=' ' ){ //Tim toi vi tri dau tien cua moi tu trong chuoi { temp[j]=s[i]; i++;j++; } temp[j]='\0'; j=0; } } getch(); }
cám ơn bạn nhiểu hen cách của bạn trong có vẻ ngắn gọn và dễ hiểu wá.
Trên thực tế thì KMP (Knuth-Morris-Pratt) chạy không nhanh hơn Brute-Force đâu nhc ah. Nếu tìm kiếm chuỗi muốn nhanh hơn thì dùng Boyer-Moore chứ không phải là KMP.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.
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!)
Vậy phiền Dr phân tích độ phức tạp của 2 thuật toán Brute force và MP(KMP) trong trường hợp csdl là file nhị phânTrên thực tế thì KMP (Knuth-Morris-Pratt) chạy không nhanh hơn Brute-Force đâu nhc ah..
Keep moving forward!
... Retired ...
Đang nói đến chuỗi text mà, nhưng chuỗi nhị phân cũng không khác nhiều.Vậy phiền Dr phân tích độ phức tạp của 2 thuật toán Brute force và MP(KMP) trong trường hợp csdl là file nhị phân
Nếu tính độ phức tạp thì KMP tốt hơn, số lượng so sánh mẫu ít hơn trong trường hợp các mẫu có sự tự lặp lại.
KMP có điểm mạnh là không cần dự phòng trong văn bản, nên có lợi hơn BF trong tìm kiếm văn bản lớn.
Nhưng trong thực tế rất ít khi xảy ra trường hợp các mẫu có tính tự lặp lại cao, thế nên mới nói là KMP không nhanh hơn Brute-Force là mấy. Cậu cứ thử đi.
Nếu việc dự phòng là không khó khăn thì Boyer-Moore lại nhanh hơn đáng kể so với 2 thuật toán trên.
Đó là nhận xét của tớ.
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!)
C++ Code:
#include<iostream> #include<string.h> int demtu(char a[2000]) { int dem=0; for(int i=0;i<strlen(a);i++) { if( a[i]==' ') dem++; } return dem+1; } void xoakhoangtrang(char s[2000]) { int n=strlen(s); for(int i=0;i<n;i++) { if((s[i]==' ')&&(s[i+1]==' ')) { int j; for( j=i;j<n;j++) { s[j]=s[j+1]; } i--; } } } int kiemtra(char a[2000],char b[20]) { int l1=strlen(a),l2=strlen(b); int i,j,k; int vt_b_a=-1; /* Vi tri xau 2 trong xau 1 */ for (i=0;i<=l1-l2;i++) /*Vi tri bat dau thu doan so sanh*/ { for (j=0;j<l2;j++) /*bat dau so sanh*/ if (b[j]!=a[i+j]) break; /*neu gap ky tu khac thi dung so sanh*/ if (j>=l2) /*neu so sanh het xau 2*/ { vt_b_a=i; break; /*Tim thay vi tri bat dau cua doan = xau2*/ } } if (vt_b_a==-1) return 0; else { return vt_b_a; } } int main() { char chuoi[2000];char tu[20],suli[2000]; int i; int sochu=strlen(chuoi),sotu=strlen(tu); xoakhoangtrang(chuoi); if(kiemtra(chuoi,tu)!=0) { int vitrichu=kiemtra(chuoi,tu); strncpy(suli,chuoi,vitrichu); } else { } return 0; }
thử xem cậu,hihi,bài làm từ hồi học C
Dùng con trỏ đi bác
cái đếm từ trong câu tại sao mình lại hok đếm số khoản trắng nhỉ..
các từ cách nhau khoản trắng mà đúng hok..
trần văn a
2 trắng => 3 từ....
anh yeu em nhiều lắm 4 trắng 5 từ
mình đánh code theo cách của admin kavin hoang, mình nghĩ cách này đúng 100%
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int occurrences( char *sentence, char *word )
{
int i,db=0,index=0,j,k;
char uj[1000];
int hely[1000];
while(1)
{
for(i=0;i<strlen(sentence);i++)
{
if(sentence[i]==word[0])
{
hely[index]=i;
index++;
}
}
for(k=0;k<index;k++)
{
int index2=0;
for(j=hely[k];j<hely[k]+strlen(word);j++)
{
uj[index2]=sentence[j];
index2++;
}
uj[index2]='\0';
if(strcmp(uj,word)==0) db++;
}
break;
}
return db;
}