在C中使用strcmp()函数

cgvd09ve  于 2023-03-22  发布在  其他
关注(0)|答案(3)|浏览(97)

我正在写一个程序,它应该从命令中输入,然后找到输入的词频。我在使用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);
}
pgvzfuti

pgvzfuti1#

strcmp函数,而不是将用户输入的单词与“zzzzz”进行比较,而是检查数组中的下一个条目“zzzzz”,因此它不会终止,因为从来没有匹配。(就像你在strcmp函数之前做wordCount++;一样)
char temp[10]-temp将指向的10个字符的数组。(不可变/常量)。
你正在传递strcmp函数,指向内存的变量的地址,而它应该被赋予一个指向内存的指针。(有点混乱,但我希望你得到图片)。所以理想地说,它应该被赋予。
strcmp(Words[wordCount],temp);strcmp(Words[wordCount],&temp[0]);
尽管我所说的可能有点混乱,但我强烈建议您查看KnR并阅读有关数组的内容,尤其是array of chars
我对你的代码做了一些修改。现在它可以按要求工作了。请看一下,如果可以的话请标记为答案

#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);
}
pbpqsu0x

pbpqsu0x2#

while(strcmp(Words[wordCount],&temp) != 0);

temp已经是一个常量char *。不要使用&操作符。这将给予你一个指向常量字符指针的指针。

vfhzx4xs

vfhzx4xs3#

do {
    scanf("%20s",Words[wordCount]);
    wordCount++;

} while(strcmp(Words[wordCount],&temp) != 0);

你只是在这里请求一个分段错误。你到底为什么要在dowhile循环中这样做?

相关问题