3
byte[] ASCIIValues = Encoding.ASCII.GetBytes(myInput);    
while (I < ASCIIValues.Length)
{
    {
        if ((ASCIIValues[I] > 65 & ASCIIValues[I] < 90) || (ASCIIValues[I] > 97 & ASCIIValues[I] < 122))
        {

        }
        ASCIIValues[I] = 32;
    }
    Console.WriteLine(ASCIIValues[I]);
    I++;
}

これは私が今持っているもので、ユーザーが入力する文字列 (私の入力) が文字のみの範囲内にあることを確認しようとしています。句読点、特殊文字、および数字をすべて削除しようとしています。I は 0 に等しく、配列を反復処理するために使用されます。不要な文字をすべてスペースに変更するのは、コードのさらに下にスペースを削除しているためです。

コードを実行すると、返されるすべての ASCII 値は32. 文字は対応する ASCII 値を返す必要があるため、これは意味がありません。

4

2 に答える 2

7

ユーザーが入力する文字列 (入力) が文字のみの範囲内であることを確認しようとしています

これを行うには、もっと簡単な方法があるかもしれません。

bool isAllLetter = yourString.All(char.IsLetter);

句読点、特殊文字、および数字をすべて削除しようとしています

var cleanStr = String.Join("", str.Where(char.IsLetter));
于 2012-12-05T15:27:43.400 に答える
6

(LB が言うように、これを行うにはもっと簡単な方法がありますが、現在のコードが機能しない理由も調べる価値があります。)

コードを実行すると、返されるすべての ASCII 値は 32 です

はい、そうです。あなたのループをよく見てください:

while (I < ASCIIValues.Length)
{
    {
        if ((ASCIIValues[I] > 65 & ASCIIValues[I] < 90) || (ASCIIValues[I] > 97 & ASCIIValues[I] < 122))
        {

        }
        ASCIIValues[I] = 32;
    }
    Console.WriteLine(ASCIIValues[I]);
    I++;
}

ブロック内では何もせず、代わりに無条件に 32 に設定しています。ifASCIIValues[I]

さらに:

  • forループではなくループを使用しwhileます。
  • ここで文字をバイトに変換する必要はありません。とにかく、各 ASCII 文字は同じ Unicode 値を持ちます。
  • 文字リテラル (など) を使用して文字を指定'A'すると、コードが読みやすくなります。
  • コードをより慣用的にするために、.NET 命名規則を採用する必要があります。
  • ここ&&の代わりに使用する必要があります&
于 2012-12-05T15:27:12.553 に答える