簡體   English   中英

在.txt文件中搜索C中的字符串?

[英]Searching .txt file for string in C?

我正在使用一個函數來通過.txt文件逐行讀取以搜索提供的單詞。 我唯一可以使用的字符串比較功能是strcasecmp,因為這是一項學習練習。 這是到目前為止的功能...

int wordsFindFast(const char const* w){

    int first = 0; //beginning of array
    int last = MAX_NB_WORDS - 1; // number of last element in array
    int middle; // middle of array
    int len = strlen(w);

    while(first <= last) {

        middle = (first + last) / 2;

        if (strncasecmp(w, words[middle], len) == 0) return 1;

        else if(strncasecmp(w, words[middle], len) < 0) {
            last = middle - 1;
        }

        else first = middle + 1;
    }

    return 0;
}

現在發生的是,除非單詞列表中的單詞晚於70,000個條目,否則搜索工作正常。 我更新了代碼以使用strncasecmp而不是strcasecmp。

在代碼的開頭定義了以下內容,並且MAX_NB_WORDS和MAX_WORD_LENGTH是全局變量。

static const char*  dataFileName = "words.txt"; 

查看“搜索”的內容。 例如,如果您正在讀取內容為“ x”的行,則“ fgets()”將返回“ x \\ n”。 那不是你想要的...

建議的更改:

int wordsFindSlow(const char const* w){
...
  char search[MAX_WORD_LENGTH+1];
  int len = strlen(w);
  while(fgets(search, MAX_WORD_LENGTH, dataFile)) { 
        if (strncasecmp(w, search, len) == 0) {
            return 1;
        }

wsearch必須以相同的字符開頭,從而編寫代碼。 您最好使用strchrsearchsearch w的第一個字符,然后使用strncasecmp並將第三個參數等於strlen(w) 如果沒有找到匹配項,請從w的第一個字符開始尋找下一個字符,然后重復進行直到與strlen(w)相比, strlen(w)一個要測試的search部分較小的字符。 這是使用foobarfubar測試的代碼。

int wordsFindSlow(const char const* w){
    /*
        ROLE            Determines whether a given word is in our words array
                        Implements slow linear algorithm
        PARAMETERS      w   word to look for in the words array
        RETURN VALUE    1   true if the word was found
                        0   false if the word was not found
    */

    char search[] = "This is for testing foobar";

    char * substr = strchr ( search, w[0] );
    while ( substr && strlen ( substr ) >= strlen ( w ) )
    {
        if ( ! strncasecmp ( w, substr, strlen ( w ) ) )
            return ( 1 );

        substr = strchr ( substr + 1, w[0] );
    }

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM