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

标签 c search fgets

我正在开发一个函数,通过 .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;
        }

关于c - 在 C 中搜索 .txt 文件中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22599165/

相关文章:

c - 如何将整数数组内容复制到字符指针?

c - fdlibm/e_pow.c 中常量的公式

algorithm - 经典(基于递归)深度优先搜索是否比基于堆栈的 DFS 的内存效率更高?

algorithm - 搜索多个值的索引的算法是什么?

php - fgets 的输出与文件格式不匹配

使用 fgets 比较当前行与下一行?

c - 请解释一下输出

查找最高有效位的算法

c - 为什么 fgets() 工作错误?

C: 未定义的楼层引用