搜尋字串

最近幫一個朋友寫一份作業
原本以為是檔案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);
因為原本以為是要對文章作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 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;
}










留言

這個網誌中的熱門文章

如何在VS2022 Community 簡要的設定UDK2018的環境

自製讀取 H 檔案並找出 define 的程式

如何Build UDK2018