在C中使用strcmp()函数

时间:2012-05-23 00:14:58

标签: c ansi strcmp

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

3 个答案:

答案 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循环中这样做呢?