-1

コマンドから入力することになっているプログラムを書いているので、入力の単語頻度を見つけます。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);
}
4

3 に答える 3

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

tempはすでに constchar *です。&演算子を使用しないでください。これにより、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

コードにいくつかの変更を加えました。現在、必要に応じて機能しています。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);
}
于 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 に答える