2013-12-06 3 views
2

Моя проблема в том, что у меня есть строка, которую я получаю с клавиатуры и хочу сохранить ее в массив символов. После того, как я получу массив, я хочу превратить его в число или что-то в этом роде.Преобразование входной строки в массив символов

Я пробовал много вещей, но это не работает. Это мое лучшее решение:

string input_string; 
char char_string[20]; 

cout << "type in some input text:$" << endl; 
cin >> input_string; 

strcpy(char_string, input_string.c_str()); 

for (int i = 0; i < 20 ; i++) 
{ 
    switch(char_string[i]) 
    { 
     case 'a' : cout << "a" << endl; break; 
     case 'b' : cout << "b" << endl; break; 
     case 'c' : cout << "c" << endl; break; 
     case 'd' : cout << "d" << endl; break; 
     case 'e' : cout << "e" << endl; break; 
     case 'f' : cout << "f" << endl; break; 
     ... 

но когда я запускаю этот код, я получаю то, чего я не ожидаю. Если вход random random

я получаю это:

r 
a 
n 
d 
o 
m 
contain uavialba char 
contain uavialba char 
contain uavialba char 
contain uavialba char 
contain uavialba char 
contain uavialba char 
contain uavialba char 
contain uavialba char 
contain uavialba char 
v 
contain uavialba char 
z 
contain uavialba char 
contain uavialba char 

Но я хочу это:

r 
a 
n 
d 
o 
m 

r 
a 
n 
d 
o 
m 

ответ

7

Проблема здесь

for (int i = 0; i < 20 ; i++) 

Вы всегда выход 20 символов , Вы должны прекратить вывод, когда вы дойдете до конца строки.

for (int i = 0; char_string[i] != '\0' ; i++) 

строки типа C имеют '\0' характер в конце концов, вы должны проверить это.

Похоже, что другая ошибка в том, что вы читаете слово вместо строки. Вместо этого

cin >> input_string; 

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

getline(cin, input_string); 

getline читает целую строку, >> читает ни одного слова.

BTW есть более простой способ написать код внутри цикла for. Вам не нужно переключатель, просто сделать это вместо того, чтобы

cout << char_string[i] << endl; 
+0

да его внешний вид, как и его Плевки вещи из соседней памяти – jm0

+0

Спасибо это работа, но все-таки просто напечатать первый случайный: S – Syngularity

+0

Почти: полукокс * может пропустить завершающий «NUL» - в противном случае +1 –

1

Вам не нужно char_string вообще. Просто притвориться input_string является массив из char s (он делает содержит один, в конце концов). Например, input_string[7] предоставит вам char.

for(char c : input_string) 
{ 
    switch(c) 
    { 
     case 'a' : cout << "a" << endl; break; 
     case 'b' : cout << "b" << endl; break; 
     ... 
1

Предпочтительно, чтобы написать не зависеть от размера and're используя зЬй :: строку.

//g++ -std=c++0x sample.cpp 
#include <iostream> 
#include <algorithm> 

using namespace std; 

int main(){ 
    string input_string; 

    cout << "type in some input text:$" << endl; 
    cin >> input_string; 

    for(auto c : input_string) 
     cout << c << endl; 

    for_each(input_string.begin(), input_string.end(), [](char c){ cout << c << endl; }); 

    return 0; 
} 
Смежные вопросы