2015-01-01 2 views
2

Я пытаюсь принять вход пользователя и преобразовать его в массив ints. Проблема в том, что когда я выбираю 4 числа, например. 2463 вывод для строки правильный, но вывод для массива int неверен и, кажется, выбранный номер + 48.Как преобразовать символы строки в массив ints

Я не совсем уверен, почему это происходит. Спасибо за любую помощь.

string userChoiceAsString; 
int[] userChoice = new int[4]; 

userChoiceAsString = (Console.ReadLine()); 

for (int i = 0; i < userChoiceAsString.Length; i++) 
{ 
    userChoice[i] = userChoiceAsString[i]; 
    Console.WriteLine(userChoice[i]); 
    Console.WriteLine(userChoiceAsString[i]); 
} 
+4

Вы должны посмотреть таблицу ASCII. – kiwixz

+1

http://www.asciitable.com/ – Plutonix

+0

Подсказка. Посмотрите, что происходит, когда вход «[X] (http://www.fileformat.info/info/unicode/char/58/index.htm) [Y] (http://www.fileformat.info/info/unicode/char/59/index.htm) [Z] (http://www.fileformat.info/info/unicode/char/5A/index .htm)». –

ответ

2

Это разумно, потому что, когда пользователь вводит символ 2, это соответствует десятичной 50. Это связано с таблицей ASCII.

Пожалуйста, посмотрите here.

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

userChoice[i] = Int32.Parse(userChoiceAsString[i].ToString()); 

или вы могли бы использовать метод Чара GetNumericValue который возвращает число с плавающей запятой, а затем закинуть к междунар ,

userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]); 
+0

Строки .NET подсчитываются последовательностями кодовых блоков UTF-16, один или два из которых кодируют код кодировки Unicode. Итак, вместо того, чтобы смотреть на таблицу ASCII, вы должны посмотреть таблицу Unicode. Вот довольно [частичный] (http://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF). Вот полная [таблица Unicode] (http://www.unicode.org/Public/UNIDATA/UnicodeData.txt). –

0

попробовать:

userChoice[i] = (int)Char.GetNumericValue(userChoiceAsString[i]); 
2

Вы должны преобразовать значение ASCII в целое, используя int.Parse(), в противном случае вы печатаете значение ASCII.

0

Число 0, которое все мы знаем, представлено символом, который имеет числовое значение 48 в ASCII, Unicode и несколько других наборов символов. Буква A равна 65 и т. Д. Это буквально не имеет никакого отношения к фактическому численному значению, так как символы также представляют буквы и миллионы других глифов, которые не имеют численного значения.

Вы можете посмотреть на метод Char.GetNumericValue, но обратите внимание, что он также возвращает числовое значение pi, e и других цифр из всех типов наборов символов.

Что мы обычно делаем, это проверить, находится ли символ между '0' и '9', и если да, получите значение (int)ch - (int)'0'. Это возвращает, как далеко ваш номер от символа '0', таким образом, значение 0..9, которое вы ищете. Так получилось, что персонажи '0'..'9' находятся друг за другом (это имеет смысл, но это не обязательно так).

Вы также можете попробовать int.Parse по одному символу или всей строке. Это также обрабатывает обычные десятичные цифры, как и следовало ожидать.

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