-1

したがって、文字と数字が混在する文字列配列をアルファベットの配列と比較し、類似した文字(つまり、文字のみ)を収集して、別の文字列配列に入れて印刷します。

初めては問題なく動作します。2回目ですが、アルファベットと比較する文字列が特定のサイズよりも小さい場合、文字列がいっぱいになり、余分な文字が表示され、場合によってはどこからともなく疑問符が表示されます。

これは、出力の周りで初めてです:

Enter a string (1-40 characters): zxcvbnm,./asdfghjkl;qwertyuiop[]
Output: abcdefghijklmnopqrstuvwxyz

そして2回目:

Enter a string (1-40 characters): abcdefg
Output: abcdefgz?

私が何を意味するのか分かりますか?「z?」どこからともなく現れた。

関数が再度呼び出された後、バッファまたは何かに文字が残っている可能性がありますか?

It turns out that I didn't have a null terminator at the end of the newest 
string before being printed! - Thanks to Mohamed!
4

3 に答える 3

3

Cの文字列はNULで終了します。文字配列を出力する前に終了する必要があります。

最後以降の文字を。に設定し'\0'ます。

于 2013-03-25T15:39:22.113 に答える
3

コードを確認してください。文字列はnull文字で終わる必要があります'\0'。これが問題の原因です。

コードに追加する必要があります

letters[z]= '\0';

後にfor

    for (x = 0; x < 26; x++){
        for (y = 0; y < strLen1; y++){
            if (alphabet[x] == string[y])
            {
                letters[z]=string[y];
                /* Increment z, to insert anothe letter in an empty space. */
                z++;
            }
        }
    }
    letters[z]= '\0'; // add this line
    printf("Output: %s\n\n", letters);

ところで、アルファベットのチェックを最適化することができます

小文字のアルファベット{a、b、c、......、z}はASCIIで参照されます。

したがって、配列を調べる代わりに、のASCIIがのASCIIとのstring[y]ASCIIの間にあることを確認できます。もっと簡単です'a''z'alphabet[]

于 2013-03-25T15:39:47.837 に答える
0

aがアルファベット文字であるisalpha()かどうかを確認するために使用する必要があります。char再発明する必要はありません。また、どちらかを処理するため、手動で小文字に変換する必要もありません。

于 2013-03-25T15:57:10.557 に答える