搜尋字串
最近幫一個朋友寫一份作業
原本以為是檔案IO的,結果後來才發現其實要考的是比較字串的演算法
演算法我看過了,嗯........我不是資工不要淌這混水了
朋友的作業有規定不能用standartd string function去處理....所以蠻麻煩的
我原本使用的程式是
FILE* fp1;
FILE* fp2;
FILE* fp3;
char text_buffer[100]={NULL};
char dic_buffer[100]={NULL};
int result=0;
fp1=fopen("1.txt","r"); // text
fp2=fopen("2.txt","r"); // dictionary
fp3=fopen("3.txt","w"); // result
while ((fscanf(fp1,"%s",text_buffer) )!=EOF){
while ((fscanf(fp2,"%s",dic_buffer)) !=EOF){ result =0;
if (strcmp(text_buffer,dic_
buffer)== 0){
break;
}
result =1;
}
if (result ==1){
fprintf(fp3,"%s ",text_buffer);
}
rewind(fp2);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
原本以為是檔案IO的,結果後來才發現其實要考的是比較字串的演算法
演算法我看過了,嗯........我不是資工不要淌這混水了
朋友的作業有規定不能用standartd string function去處理....所以蠻麻煩的
我原本使用的程式是
FILE* fp1;
FILE* fp2;
FILE* fp3;
char text_buffer[100]={NULL};
char dic_buffer[100]={NULL};
int result=0;
fp1=fopen("1.txt","r"); // text
fp2=fopen("2.txt","r"); // dictionary
fp3=fopen("3.txt","w"); // result
while ((fscanf(fp1,"%s",text_buffer)
while ((fscanf(fp2,"%s",dic_buffer))
if (strcmp(text_buffer,dic_
break;
}
result =1;
}
if (result ==1){
fprintf(fp3,"%s ",text_buffer);
}
rewind(fp2);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
因為原本以為是要對文章作filter的.........
不過因為禁止使用strcmp這段就無用了
後來我就不再follow朋友的作業了,自己的作業還是自己搞定吧
不過因為我對strcmp還挺有興趣的,所以我自己就寫了一個很陽春的功能
然後寫了一個很簡單的範例證明有用,就踏實了,好高興啊
邏輯上很簡單,先抽出filter的第一個字元,讀取檔案字元若沒有相符filter的第一個字的話,
就跳到檔案讀下一個字元
若有相符,再檢查filter剩下的字元是否跟檔案接下來的字元匹配
以下是範例
int search_string(char* A,char* B);
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
}
else
{
char* string1 ="this is an apple";
char dic[]={'t','h','i','s','\0'};
int result=0;
result=search_string(string1,
dic);
if (result == 1){
cout << "word in sentense"<
}
else{
cout << "word not in sentense"<
}
}
return nRetCode;
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
}
else
{
char* string1 ="this is an apple";
char dic[]={'t','h','i','s','\0'};
int result=0;
result=search_string(string1,
if (result == 1){
cout << "word in sentense"<
}
else{
cout << "word not in sentense"<
}
}
return nRetCode;
}
int search_string(char* A,char* B){
int size_string=0;
int size_dic=0;
int Index=0,offset=0;
int result=0;
while(A[size_string]!='\0') { size_string++;}
// cout << "size_string is " << size_string;
while(B[size_dic]!='\0') { size_dic++;}
// cout << "size_dic is " << size_dic;
while(1){
while(A[Index]!=B[0]){ Index++;}
while(A[Index+offset]==B[offset]){
if (offset+1 == size_dic) {
result = 1;
break;
}else
{
offset++;
}
}
Index++;
if (A[Index+size_dic] == '\0'){
// if((Index+size_dic) <= size_string){
break;
}
}
return result;
}
int size_string=0;
int size_dic=0;
int Index=0,offset=0;
int result=0;
while(A[size_string]!='\0') { size_string++;}
// cout << "size_string is " << size_string;
while(B[size_dic]!='\0') { size_dic++;}
// cout << "size_dic is " << size_dic;
while(1){
while(A[Index]!=B[0]){ Index++;}
while(A[Index+offset]==B[offset]){
if (offset+1 == size_dic) {
result = 1;
break;
}else
{
offset++;
}
}
Index++;
if (A[Index+size_dic] == '\0'){
// if((Index+size_dic) <= size_string){
break;
}
}
return result;
}
留言