-2

問題:

単語と文字のカウンターを設計し、特定の文字のヒストグラムを表示します。

ヒストグラムでは、任意の文字を使用して、特定の文字の 1 つのインスタンス ( など) を表すことができ、Xその文字のインスタンスの数を行末に出力する必要があります。入力した文に 1 つ以上出現する文字の結果のみを出力します。プログラムでは、同じ文字の小文字と大文字を別々の文字として扱う必要があります。

以下は、文のヒストグラムがどのように見えるかの例です。i_Looooove__eps_II

Word total: 4
Character total: 18
Character total omitting underscore: 14

e: XX (2)
i: X (1)
o: XXXXX (5)
p: X (1)
s: X (1)
v: X (1)
I: XX (2)
L: X (1)
_: XXXX (4)

これが私がこれまでに持っているものです:

void histogram(char array3[]){
    char alphabet[25] = {0};
    int count;
    char *locate;
    int i;
    int j;

    for(i=0; array3[i] != '\0'; i++){
        array3[i] = tolower(array3[i]);
    }
    count = 0;
    for(i = 0; i <= 25; i++){
        locate = &array3[i];
        while(locate = strchr(locate, 'a' + i)){
            ++count;
            locate++;
        }
        alphabet[i] = count;
    }
    printf("\nThe number of occurrences of each letter is: \n");

    for(i = 0; i <= 25;i++){
        printf("%c:%3d\n", 'a' + i, alphabet[i]);
    }
    return;
}

期待どおりに何かが機能していません:

ヒストグラムの出力は、各文字の出現回数ではなく、すべて 1 です。

4

2 に答える 2

0

これはここで問題を引き起こしています

for(i = 0; i <= 25; i++)

i は 0..25、つまり 26 文字ですが、配列は 25 文字の次元しかありません。

char alphabet[25] = {0};

あなたのループは

for(i = 0; i < 25; i++)
于 2013-04-10T05:11:45.933 に答える