如果我有一串数字和int
个变量a, b, c
,我想将第一个数字分配给int a
,第二个数字分配给int b
,依此类推我这样做?这个片段说明了我的问题:
var str = "123";
int a = Convert.ToInt32(str[0]);
Console.WriteLine(str[0] + " " + a );
输出:
1 49
我该怎么做(除了从每次尝试的转换中减去48)?
修改
今天我了解到str[0]
生成了Char
,而不是string
。
答案 0 :(得分:3)
int a = str[0] - '0';
int b = str[1] - '0';
int c = str[2] - '0';
等...
这是有效的,因为str[0]
是char
,'0'
也是如此,减去字符会在C#中为您提供int
。
<子> P.S。嗯,严格来说,减去char
s并不能给你一个int
。没有为char
定义减法,但是字符可以隐式转换为int
,因此会发生什么:两次隐式转换为int
,显然可以从每个中减去另一个是给另一个int
。
答案 1 :(得分:0)
您正在使用Convert.ToInt32(char)
重载。试试ToString
:
int a = Convert.ToInt32(str[0].ToString());
使用Math的另一种方式(我不擅长)
string x = "123";
int number = int.Parse(x);
int first = number / 100;
int second = (number % 100) / 10;
int third = number % 10;
答案 2 :(得分:0)
以Selman22的答案为基础:
var str = "123";
int digit = GetDigit(str, 1);
Response.Write(digit.ToString()); // Prints '1'
int GetDigit(String s, Int32 digitPos)
{
var actualDigitPos = (s.Length - digitPos) + 1;
var number = Int32.Parse(s);
return (number % (Int32)Math.Pow(10, actualDigitPos)) / (Int32)Math.Pow(10, actualDigitPos - 1);
}
请记住,您应该在字符串长度和digitPos上添加某种验证,以及有效的字符串等。