检查ASCII是否在两个范围内

时间:2012-12-05 15:23:00

标签: c#

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

这就是我现在所拥有的,我正在努力确保用户输入的字符串(我的输入)仅在一个字母的范围内。我试图删除所有标点符号和特殊字符以及数字。我等于0并用于迭代数组。将所有不需要的字符更改为空格是因为在我的代码中我正在删除空格。

运行代码时,每个返回的ASCII值为32。这没有任何意义,因为字母应该返回相应的ASCII值。

2 个答案:

答案 0 :(得分:7)

  

我正在尝试确保用户输入的字符串(我的输入)仅在字母范围内

可能有更简单的方法可以做到这一点。

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

我正在尝试删除所有标点符号和特殊字符以及数字

var cleanStr = String.Join("", str.Where(char.IsLetter));

答案 1 :(得分:6)

(正如L.B所说,有更简单的方法可以做到这一点 - 但是值得研究为什么你当前的代码也不起作用。)

  

运行代码时,每个返回的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命名约定来使您的代码更加惯用
  • 您应该使用&&代替&此处