第一个函数检查子字符串中包含的字母个数
int num_matches(char* word, char* letters) {
char scrabble[128];
strcpy(scrabble, letters);
int num = 0;
for (int i = 0; i < strlen(word); i++) {
if (strchr(letters, word[i]) == NULL) {
return -1;
}
for (int j = 0; j < strlen(letters); j++) {
if (word[i] == letters[j]) {
num++;
scrabble[j] = ' ';
break;
}
}
}
return num;
}
对于"QWOP", "QWOP"返回4。然而,在下面的函数中,它对每个函数调用都返回相同的错误值,即使buff和字母打印为"QWOP", "QWOP"从我的调试尝试。
void read_words(int num_count[128], char* (*word_idx)[128], int argc, char** argv) {
FILE* fp = fopen(argv[1], "r");
char* letters = argv[2];
int idx = 0;
char buff[128];
int result = 0;
while (fgets(buff, 128, fp) != NULL) {
printf("buff:%s letters:%sn", buff, letters);
result = num_matches(buff, letters);
printf("result: %dn", result);
num_count[idx] = result;
char* word = malloc(strlen(buff) + 1);
strcpy(word, buff);
(*word_idx)[idx] = word;
idx++;
result = 0;
}
fclose(fp);
}
buff:QWOP
letters:QWOP
result: -1
我的txt文件:
ABC
DEFG
QWOP
QWOP
QUOKKA
QUOLL
QUASH
QUANDONG
由于fgets在换行符处停止,并且我的文本文件中没有空格,所以我认为阅读buff应该没有任何问题。
fgets读取以n
字符结尾的数据。
在这种情况下,你的函数将失败。很容易测试:
int main(void)
{
printf("%dn", num_matches("ABCD", "ABCD"));
printf("%dn", num_matches("ABCDn", "ABCD"));
}
结果:
4
-1
你需要从buff中移除n
。
另一个问题是第二个函数。参数char* (*word_idx)[128]
是一个指针,指向一个包含128个char指针的数组。我不认为那是你想要的。