【问题标题】:How to convert a string's chars into an array of ints如何将字符串的字符转换为整数数组
【发布时间】:2015-01-01 13:55:56
【问题描述】:

我正在尝试获取用户的输入并将其转换为整数数组。问题是当我选择 4 个数字时,例如2463 字符串的输出正确,但 int 数组的输出不正确,似乎是选择的数字 + 48。

我不太确定为什么会发生这种情况。感谢您提供的任何帮助。

string userChoiceAsString;
int[] userChoice = new int[4];

userChoiceAsString = (Console.ReadLine());

for (int i = 0; i < userChoiceAsString.Length; i++)
{
    userChoice[i] = userChoiceAsString[i];
    Console.WriteLine(userChoice[i]);
    Console.WriteLine(userChoiceAsString[i]);
}

【问题讨论】:

  • 你应该看看 ASCII 表。
  • 提示:看看当输入为“XYZ”时会发生什么。

标签: c# arrays string int


【解决方案1】:

这是合理的,因为当用户输入字符 2 时,这对应于十进制 50。这与 ASCII 表相关联。

请看here

为了避免这种情况,您应该尝试解析每个字符,如下所示:

userChoice[i] = Int32.Parse(userChoiceAsString[i].ToString());

或者您可以使用 Char 的方法 GetNumericValue,它返回一个浮点数,然后将其转换为一个 int。

userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]);

【讨论】:

  • .NET 字符串是 UTF-16 代码单元的计数序列,其中一个或两个编码一个 Unicode 代码点。因此,您应该查看 Unicode 表,而不是查看 ASCII 表。这是一个漂亮的partial one。这是完整的Unicode table
【解决方案2】:

您需要使用 int.Parse() 将 ASCII 值转换为 int,否则您将打印 ASCII 值。

【讨论】:

    【解决方案3】:

    试试:

    userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]);
    

    【讨论】:

      【解决方案4】:

      我们都知道的数字0是用ASCII、Unicode和其他几个字符集中数值为48的字符来表示的。字母 A 是 65,等等。这实际上与实际数值无关,因为字符也代表字母和数百万没有数值的其他字形。

      您可以查看Char.GetNumericValue 方法,但请注意,它还从各种字符集中返回 pi、e 和其他数字的数值。

      我们通常做的是检查字符是否在'0''9'之间,如果是,则取值为(int)ch - (int)'0'。这将返回您的号码与 '0' 字符的距离,即您正在寻找的 0..9 值。碰巧字符'0'..'9' 一个接一个(这很有意义,但不一定如此)。

      您也可以在单个字符或整个字符串上尝试int.Parse。这也可以处理您所期望的通常的十进制数字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-04
        • 2016-08-03
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多