2013-12-08 3 views
0

У меня есть строка, которая содержит какой-либо пользователь имеет входкак поместить строку в целом массиве C++

string userstr = ""; 
cout << "Please enter a string "; 
getline (cin, userstr); 

Строка сохраняются в userstr, я тогда хочу строка, которая будет храниться в целочисленный массив, где каждый символ является другим элементом в массиве. Я создал динамический массив следующим образом:

int* myarray = new int[sizeof(userstr)]; 

Однако как я могу получить свою строку в этот массив?

+0

-1 что вы имеете в виду. –

+2

'sizeof (userstr)' не совпадает с 'userstr.length()' или 'userstr.size()'. – chris

+0

Возможный дубликат [C++ String Length?] (Http://stackoverflow.com/questions/905355/c-string-length) –

ответ

1

Вы можете получить доступ к каждому элементу в строке, используя оператор [], который будет возвращать ссылку на символ. Затем вы можете вычесть значение int для char '0', и вы получите правильное представление int.

for(int i=0;i<userstr.length();i++){ 
    myarray[i] = userstr[i] - '0'; 
} 
+0

, когда я делаю это и отображаю myarray, я просто получаю случайные числа: например, если я вхожу в «hey my name is», то out out 006B4D30 – user3080755

+0

Я предполагаю, что введенный «предполагается» как int. Если вы хотите сохранить строку в виде массива целых чисел, то что вы делаете, это сохранение целого числа, представляющего каждый символ, - это то, что вы пытаетесь сделать? Я не понимаю, что делать, если это так. – rami1988

+0

Извините, что это то, что я пытаюсь сделать, это был очень долгий день o.O – user3080755

4
int* myarray = new int[ userstr.size() ]; 

std::copy(usestr.begin(), userstr.end(), myarray); 

Оконечный ноль не был присоединен к массиву. Если вам это нужно, вы должны выделить массив, имеющий еще один элемент, и поместить нулевой конец.

+0

, когда я делаю это, я получаю эту ошибку: Windows вызвала точку останова в cw2.exe. Это может быть связано с повреждением кучи, что указывает на ошибку в cw2.exe или на любую из загруженных DLL-файлов. Это может быть связано с нажатием кнопки F12, когда cw2.exe имеет фокус. Выходное окно может содержать больше диагностической информации. – user3080755

+0

+1. Естественно, можно было бы также объявить 'myarray' таким образом, чтобы автоматически освобождать свою память, когда она выходит за рамки. I.e 'int myarray [userstr.size()];' – enhzflep

+0

, но userstr не является константой, он дает мне ошибку, говоря, что выражение должно иметь постоянное значение – user3080755

-1

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

for(int i=0;i<userstr.length();i++){ 
    myarray[i] = userstr[i]; 
} 
0

Вы можете просто использовать isstringstream, чтобы преобразовать строку в целое следующим образом

istringstream istringName(intString); 
istringName >> real_int_val; 

теперь она волшебным образом стать Int, содержащий все числа из строки Однако я не понимаю, почему вы не захотели cin это как int в первую очередь ??

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