2014-09-21 37 views
-1

如果我有数字和int变量的字符串a, b, c,我想将第一个数字来int a,第二个int b等等,我该怎么做呢?这片段说明我的问题:转换数字串字符INT32

var str = "123"; 
int a = Convert.ToInt32(str[0]); 
Console.WriteLine(str[0] + " " + a); 

输出:

1 49 

我该怎么办(除了从每一个试图转换减去48)?

编辑

今天笔者了解到str[0]产生Char,而不是一个string

+0

为什么不在0处使用'str'而不是索引? – Tdorno 2014-09-21 22:47:50

+0

我不认为我理解。或者你也许不明白。我想'int a == 1','int b == 2','int c == 3'。 – JB0x2D1 2014-09-21 22:49:11

+0

备注:“字符串”通常指C#问题中的字符串类型,在您的情况下,您正在谈论“char”类型所代表的C#中的“字符串字符”。使用合适的词可以帮助您找到解决方案(即使用比您已经接受的C风格解决方案更多的C#/ .Net方法进行复制),或者至少可以帮助其他人回答。 – 2014-09-22 00:50:57

回答

3
int a = str[0] - '0'; 
int b = str[1] - '0'; 
int c = str[2] - '0'; 

等等

这工作,因为str[0]char,所以是'0',并减去字符给你一个int在C#。

P.S.那么,严格来说,并不是说减去char就是给你一个int。减法没有被定义为char,但是字符可以隐式转换为int,所以会发生什么情况:两个隐式转换为int,并且显然可以将这两个转换为另一个int

+0

对于C风格的解决方案。对于.net一个检查[char to int](http://stackoverflow.com/questions/239103/c-sharp-char-to-int)。严格地说,这是完全“除了每次尝试转换中减去48以外”的问题... – 2014-09-22 00:51:56

+0

+1以获得最佳答案 – 2014-09-22 01:09:42

+0

呃...我认为'char'到'int'的转换是C#风格的,我认为*解析*单个字符*的数字既不是一个好主意,也不会在C#中更习惯。 – 2014-09-22 01:30:05

0

您正在使用Convert.ToInt32(char)过载。试着用ToString

int a = Convert.ToInt32(str[0].ToString()); 

使用数学(这我不擅长的)另一种方式

string x = "123"; 
int number = int.Parse(x); 
int first = number/100; 
int second = (number % 100)/10; 
int third = number % 10; 
+0

好的。看起来笨重。没有更优雅的方式吗?谢谢 – JB0x2D1 2014-09-21 22:47:27

+1

第三种方式'int b = Convert.ToInt32(str.Substring(1,1));' – JB0x2D1 2014-09-21 22:58:07

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上添加某种验证,以及有效的String等。