2014-09-21 86 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等。