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