2013-05-20 3 views
0

Предположим, что есть строка «123124125». Я хочу вынуть каждые 3 символа из строки и сохранить в целочисленный массив.Append int in string to int []

например,

int[0] = 123, 
int[1] = 124, 
int[2] = 125, 

Пусть ниже Струнный шифртекста является "123124125":

String^ciphertext; 
int length1 = ciphertext-> Length; 
int count = 0; 
int count1 = 0; 

while (count < length1) 
{ 
    number[count1] = (ciphertext[count] * 100) + (ciphertext[count+1] * 10) + ciphertext[count+2]); 
    count = count + 3; 
    count1++; 
} 

Выше код, который я написал. Результат должен быть 123 внутри number[], но это не так.

Когда ciphertext[count] раз 100, он не использует '1' в разы на 100, а является его десятичным числом. Таким образом, значение «1» в десятичном значении равно «50», поэтому результат равен «5000», но не 100.

Моя проблема заключается в том, как я могу добавить их 3 на 3 в int []? Как я могу избежать использования десятичного числа, но использовать 1 прямой?

Извините за мой плохой английский. Очень ценю вам помощь, спасибо заранее.

ответ

0

EDIT. Я предложил 9 - ('9' - char), но, как предложил gkovacs90 в своем ответе, char - '0' - лучший способ его написать.

Причина в том, что ciphertext[count] является символом, поэтому его включение в int дает вам код ascii для этого символа, а не целое число. Вы могли бы сделать что-то вроде ciphertext[count]) -'0'

Например, скажем, что ciphertext[count] is '1'. Значение ascii для символа 1 равно 49 (см. http://www.asciitable.com/). Таким образом, если вы ciphertext[count]*100 даст вам 4900.

Но если вы ciphertext[count] -'0' вы получаете 49 - 48 == 1

Итак ...

String ciphertext; 
int length1 = ciphertext-> Length; 
int count = 0; 
int count1 = 0; 

while (count < length1) 
{ 
    number[count1] = 
     ((ciphertext[count] -'0') * 100) + 
     ((ciphertext[count+1] - '0') * 10) + 
     (ciphertext[count+2] - '0'); 
    count = count + 3; 
    count1++; 
} 
+0

Спасибо всем !! Это работа! Спасибо gkovacs90, чтобы предложить мне способ, пока Jimbo для объяснения, и теперь я полностью понимаю об этом .. и спасибо loxxy предложил мне другой метод .. =) –

1

Я хотел бы использовать ciphertext[count] -'0', чтобы получить Int значение символа.

Вы также можете использовать функцию atoi на подстроках, которые хотите преобразовать в целое.

1

Другие указали вашу ошибку. Кроме того, как это сделать?

string str = "123124125"; 

int i = str.Length/3; 

int[] number = new int[i]; 

while(--i>=0) number[i] = int.Parse(str.Substring(i*3,3));