C#将字符串数组的问题转换为Int数组

时间:2015-11-04 23:28:09

标签: c# arrays string

我正在使用C#,我在将字符串数组转换为int数组时遇到了问题。 首先,我使用Console

创建了一个字符串编号
var numbers = Enumerable.Range(1, 50) // 1,2,3,...50
                        .ToList();

numbers.Where(nmb => (nmb % 3) == 0)  // Give us all numbers divisible by 3.
       .Select(nmb => new
       {
           Number = nmb,
           By3 = true,
           By3And9 = (nmb % 9) == 0 // The ones divisible by 9
       });

然后我将字符串转换为数组

Console.WriteLine("Geben Sie die Nummer ein:");
string wert = Console.ReadLine();

现在出现了问题。我想将字符串数组转换为int数组,但例如对于字符串wertarray1 [0] = 1,int数组的值为49。

char[] wertarray = wert.ToCharArray();
wertarray1 = new string(wertarray);*

正常情况下,Int值应为1,但我不知道问题出在哪里。

我尝试了从这个论坛“将字符串数组转换为int数组”的解决方案,但我仍然遇到了int值得到一个奇怪数字的问题。

我期待着寻求帮助。 谢谢: - )。

3 个答案:

答案 0 :(得分:1)

Convert.ToInt16(Char)获取char的数值(即其Unicode代码点值)并返回该数字。虽然您可能认为Convert.ToInt16('1')应该返回1,但请考虑如果您尝试Convert.ToInt16('@')会发生什么。

使用Int16.Parse(或TryParse)将字符串实际解析为数字。当您使用单个字符表示0-9时,您可以使用简单的算术来完成它,而无需调用任何Parse函数:

String line = Console.ReadLine();
List<Int16> numbers = new List<Int16>( line.Length );
foreach(Char c in line) {
    Int16 charValue = (Int16)c;
    if( charValue < 48 || charValue > 57 ) throw new Exception("char is not a digit");
    Int16 value = charValue - 48;
    numbers.Add( value );
}

答案 1 :(得分:0)

您在输入流中获得Unicode code point value个字符 - 49是字符1的unicode值。

如果要将数字的unicode字符转换为该数字的数值,可以使用System.Globalization.CharUnicodeInfo.GetDecimalDigitValue(char c)

    var wertarray2 = wert.Select(c => (short)CharUnicodeInfo.GetDecimalDigitValue(c)).ToArray();

它处理所有数字(包括上标数字),而不仅仅是标准的ASCII数字。

答案 2 :(得分:0)

提供的答案已经解释了您的问题并提供了解决方案。

通常,您可以将char转换为string并将parse转换为整数(但不是最佳效果)。

如果你有所有数字字符串

var numStr = "136";
var numbers = numStr.Select(n => int.Parse(n.ToString())).ToList(); // {1, 3, 6}

如果您的字符串也包含非数字

var mixStr = "1.k78Tj_n";
int temp;
var numbers2 = new List<int>();
mixStr.ToList().ForEach(n =>
{
    if (int.TryParse(n.ToString(), out temp))
        numbers2.Add(temp);
}); //{ 1, 7, 8 }