-2

手紙が再び入​​力された場合、「手紙はすでに読まれました」と表示されるように、プログラムがどのように読むことができるか教えてもらえますか?

これが私のコードです:

#include <stdio.h>
#include <string.h>
#include <conio.h>

int main()
{
    char alphabet[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char letter;
    int i;
    for(i = 0; i < 26; i++)
    {
    printf("%s\n\n", alphabet);
    printf("Choose a letter: ");
    letter = getchar();

    printf("\n\n");

    for(i = 0; i < 26; i++)
    {
        if (letter == alphabet[i]) 
         {
            alphabet[i] = '_';
            break;   /* This terminates the for() loop */
         }        


    }
     printf("Result: %s\n", alphabet);

     }

}
4

4 に答える 4

2

それはかなり簡単です。サイズが 26 の別の配列があり、すべて false で開始する場合があります。文字を取得するたびに、対応するスロットを true に設定します。次に、文字を取得し、それが既に入力されているかどうかを確認したい場合は、対応するスロットが true か false かを確認するだけです。

ところで、内側の for ループで i も使用したくないと思います。外側の for ループが i をコントローラーとして使用しているため、別の変数、たとえば j を使用することができます。これにより、問題が発生する可能性があります。

于 2013-09-24T03:12:20.873 に答える
0

入力された文字の配列が必要だと思いますが、そうでない場合は2つの変数を使用できます

char prevletter;
char latestletter;

これで、プレブレターが最新のレターと等しいかどうかを比較できます

latestletter = getchar();

if (prevletter == latestletter)
{
printf("Alredy inputted this");
}

else 
{
prevletter =latestletter;
}

このコードは、文字が連続して入力されたのではなく、他の試行後に繰り返されたかどうかを知りたい場合にのみ、連続した文字に対してのみ機能します。配列を使用できます

     char inputletters[xx];

use for loop to check if it exist in the array if yes `printf the warning else continue`

  char inputletters[xx];

  for(i = 0; i < xx; i++)
    {
        if (letter == inputletters[i]) 
         {
           printf("AlreadyInputed");

           Break;
         }        


    }

入力文字の配列に存在しない場合は、ここで入力文字を挿入するプロセスを実行します

于 2013-09-24T03:18:47.320 に答える
0

入力が大文字のみで構成されている場合、内側のループの最後に到達した場合、つまり、文字が既に に置き換えられているためにアルファベットに見つからない場合にのみ、文字は既に提供されています_。これを確認する 1 つの方法はi、内側のループの後で 26 に等しいかどうかを確認することです。少しきれいな方法は、ブール値を使用して、内側のループから抜け出したかどうかを示すことです。

入力に任意の文字を使用できる場合は、別の配列を使用して、 の文字を置き換えるのではなく、既に提供されている文字を追跡することをお勧めしalphabetます。あなたが持つことができます:

const char alphabet[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int count[26] = {0};

if (letter == alphabet[i]) 
{
    ++count[i];
    break;
}

各手紙が提供された正確な回数を追跡するため。

于 2013-09-24T03:08:40.930 に答える