2017-02-02 3 views
1

У меня есть этот код:Как преобразовать определенную строку [index] в int в C#?

string number = "124235245423523423", number2 = "3423525232332325423"; 
for(i=number.length-1;i>=0;i--){ 
int save = Convert.ToInt32(number[i]) + Convert.ToInt32(number2[i]); 
} 

То есть не полный код, но мой вопрос, почему я не могу преобразовать и получить доступ некоторое значение в определенный индекс строки в целое число? Разве нет прямого подхода к этому? Я пробовал кое-что, но это не сработало.

+0

Получить символ по индексу, а затем преобразовать его в число. Полезные ссылки: http://stackoverflow.com/questions/2416894/how-to-return-the-character-which-is-at-the-index http://stackoverflow.com/questions/239103/c -sharp-char-to-int –

+1

для (i = number.length-1; i> = 0; i--) – owairc

+1

Почему вы не указали актуальную проблему, «IndexOutOfRangeException»? –

ответ

2

Вы ищете int.Parse.

int save = int.Parse(number[3].ToString()); 

Преобразование char в Int32 возвращает значение этого символа в текущей кодировке.

Для получения дополнительной информации см. the MSDN documentation for Int32.Parse.

+0

Это работает, я понимаю, что, поскольку int.Parse и Convert.ToInt32 преобразует строку в целое число, мы можем сначала преобразовать символ в индекс строки в строку, а затем использовать для них методы преобразования или анализа. Делает смысл –

+0

@TalhaImam Отлично! Если ответ соответствует вашему требованию, не могли бы вы нажать на отметку на левой стороне, чтобы принять его как ответ на свой вопрос? Это поможет другим людям, которые ищут то же самое в будущем. – Zesty

1

Я думаю, что это то, что вы ищете. Вы должны получить доступ к строке по значению индексатора, а затем преобразовать:

int yourNumber = Convert.ToInt32(number[4].ToString()); 

Это даст вам дорожит 3

+1

Это не сработает. 'Convert.ToInt32 (Char)' возвращает код символа (т. Е. 'Convert.ToInt32 (" 1 ")' возвращает '49', а не' 1'). –

+0

Право !. Просто отредактировано – NicoRiff

0

Вот один из способов сделать это:

string number = "124235245423523423", number2 = "3423525232332325423"; 
for(int i=number.Length-1;i>=0;i--){ 
    int save = int.Parse(number[i].ToString()) + int.Parse(number2[i].ToString()); 
    Console.WriteLine(save); 
} 

Когда Convert.ToInt32() получает char, он возвращает кодированный код кода UTF-16 аргумента значения (read on MSDN).
С другой стороны, когда он получает строку, он возвращает число, содержащее строку, или генерирует исключение, если оно не является числом.

0
string number = "124235245423523423", number2 = "3423525232332325423"; 
    for(int i=number.Length-1;i>=0;i--){ 
    int sum = int.Parse(number[i].ToString()) + int.Parse(number2[i].ToString()); 
    Console.WriteLine(sum); 

working example

0

Ну, так number[i] имеет тип char вы можете преобразовать его в соответствующие int либо (наибольший общий случай)

int result = (int) char.GetNumericValue(number[i]); 

пожалуйста обратите внимание, что char.GetNumericValue возвращается double, это актуально для, скажем, '⅜' характера (3/8 corrsponds к 0.375); или если вы работаете только с ['0'..'9'] диапазона, все, что вам нужно сделать, это вычесть '0':

int result = number[i] - '0'; 

Пока ваш код может быть реализован как

// Math.Min - number.Length and number2.Length have diffrent size 
// - 1  - strings are zero-based [0..Length - 1] 
for (i = Math.Min(number.Length, number2.Length) - 1; i >= 0; i--) { 
    int save = number[i] + number2[i] - 2 * '0'; 
    ... 
} 

вероятно вы хотите право выравнивать как строки:

number = "124235245423523423" 
    + 
number2 = "3423525232332325423" 
------------------------------ 
      354...  ...846 

в этом случае вы должны изменить for цикл:

for (int i = 0; i < Math.Max(number.Length, number2.Length); ++i) { 
    int sum = 
    (i < number.Length ? number[number.Length - i - 1] : '0') + 
    (i < number2.Length ? number2[number2.Length - i - 1] : '0') - 
    2 * '0'; 
    ... 
} 
0

мне нужно было значение при определенном индексе, вот как я это сделал, и он прекрасно работает для меня:

int number = (int)char.GetNumericValue(number[index]) 

То, что я на самом деле является то, что я преобразовал символ в индексе я необходимого в double сначала методом GetNumericValue, а затем я преобразовал это двойное в целое число.

Смежные вопросы