我正在编写一个应该从命令输入的程序,然后找到输入的单词频率。我在使用strcmp()函数比较字符串(char数组)时遇到问题。我已经好几个小时,但我仍然不明白我做错了什么。它与指针有关吗?这是我的代码:
#include <stdio.h>
#include <string.h>
int main(){
char Words[501][21];
int FreqNumbers[500];
char temp[21] = "zzzzz";
char Frequency[5][21];
int wordCount = 0;
int numberCount = 0;
int i = 0;
int counter = 0;
int end = 0;
do {
scanf("%20s",Words[wordCount]);
for(counter = 0;counter < wordCount;counter++){
if(wordCount > 0){
if(strcmp(Words[wordCount], Words[counter]) == 0){
FreqNumbers[counter]++;
break;
}
FreqNumbers[wordCount]++;
}
}
wordCount++;
printf("%s", Words[wordCount - 1]);
printf("%s", temp);
} while(strcmp(Words[wordCount],&temp) != 0);
return(0);
}
答案 0 :(得分:1)
while(strcmp(Words[wordCount],&temp) != 0);
temp
已经是const char *
。不要使用&
运算符。这将为您提供指向const char指针的指针。
答案 1 :(得分:1)
strcmp
函数,而不是将用户输入的单词与“zzzzz”进行比较,而是使用“zzzzz”检查数组中的下一个条目,因此它没有终止,因为从来没有匹配。 (正如wordCount++;
函数之前strcmp
)
char temp[10]
- 由temp
指向的10个字符数组。 (不可变/常数)。
您正在传递strcmp
函数,该变量的地址指向一个内存,而它应该被赋予一个指向内存的指针。(有点令人困惑,但我希望你能得到图片)。理想情况下应该给出它。
strcmp(Words[wordCount],temp);
或strcmp(Words[wordCount],&temp[0]);
虽然我说的话可能有点令人困惑。我强烈建议您查看KnR
并阅读数组,尤其是array of chars
我对您的代码进行了一些更改。它现在按要求工作。如果可以接受,Pl会有一个外观和标记作为答案
#include <stdio.h>
#include <string.h>
int main(){
char Words[501][21]={{0}}; //zero initialized
char *temp = "zzzzz"; //string literal
int FreqNumbers[500],wordCount = 0,counter = 0; //other variables
do {
scanf("%s",Words[wordCount]);
for(counter = 0;counter < wordCount;counter++){
if(wordCount > 0){
if(strcmp(Words[wordCount], Words[counter]) == 0){
FreqNumbers[counter]++;
break;
}
FreqNumbers[wordCount]++;
}
}
wordCount++;
printf("%s\n", Words[wordCount - 1]); //print if required
printf("%s\n", temp); //print if required
} while(strcmp(Words[wordCount-1],temp) != 0);
return(0);
}
答案 2 :(得分:0)
do {
scanf("%20s",Words[wordCount]);
wordCount++;
} while(strcmp(Words[wordCount],&temp) != 0);
你只是在这里要求一个段错误。为什么你在do while循环中这样做呢?