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++;
}

您在块内什么都不做,而是if无条件设置ASCIIValues[I]为 32。

此外:

  • 我会使用for循环而不是while循环。
  • 您实际上并不需要在这里将字符转换为字节;无论如何,每个 ASCII 字符都具有相同的 Unicode 值。
  • 使用字符文字('A'等)指定字符将使代码更易于阅读
  • 您应该采用 .NET 命名约定,以使您的代码更加地道
  • 你应该使用&&而不是&这里
于 2012-12-05T15:27:12.553 回答