-1

我正在编写一个应该从命令输入的程序,然后找到输入的词频。我在使用 strcmp() 函数比较字符串(字符数组)时遇到问题。我已经做了几个小时,但我仍然不明白我做错了什么。跟指针有关系吗?这是我的代码:

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

3 回答 3

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

temp已经是 const 了char *。不要使用&运算符。这会给你一个指向 const char 指针的指针。

于 2012-05-23T01:31:49.097 回答
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

我对您的代码进行了一些更改。它现在按要求工作。如果可以接受,请查看并标记为答案

#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);
}
于 2012-05-23T03:56:01.227 回答
0
do {
    scanf("%20s",Words[wordCount]);
    wordCount++;

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

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

于 2012-05-23T00:28:56.823 回答