2015-02-22 3 views
0
#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    string n, m; 
    vector <string> dingdong; 

    cin >> n; 
    dingdong.push_back(n); 
    cin >> m; 
    dingdong.push_back(m); 

    for (int i = 0; i <2; i ++) { 
     cout << dingdong[i]; 
    } 


    return 0; 
} 

Когда я запускаю программу, и я ввожу «hay sombody there» и нажмите enter. Программа печатает «haysombody». Поэтому я решил, что если я увеличу «i» до 3, программа напечатает «haysombodythere», но нет, main просто падает. почему это происходит и как это сделать, чтобы сохранить все строки (включая пробелы)?Строка не сохраняется в векторе?

ответ

3

«Почему это происходит и как это сделать, чтобы сохранить все строки (включая пробелы)?»

Чтобы получить более одного слова от входа, вы должны использовать

std::getline(cin,n); 

вместо

std::cin >> n; 

Пробелы используются в качестве разделителей по умолчанию, так что каждый вызов std::istreamoperator>> просто сохранит текст, считываемый до следующего символа пробела.


См. Полностью фиксированную версию вашей программы here.


Кроме того, если вы действительно хотите, чтобы прочитать в vector слово за словом, вы используете цикл делает так

string word; 
vector <string> dingdong; 
while(cin >> word) { 
    if(word.empty) { 
     break; 
    } 
    dingdong.push_back(word); 
} 

и распечатать как

for (int i = 0; i < dingdong.size(); ++i) { 
    cout << dingdong[i]; 
} 
+0

как бы я идти об этом если бы я передал строку «слово» в функцию класса. У меня: строка aboutwhat; cout << "Введите тему:" << endl; getline (cin, aboutwhat); человек. ЗаменаSubject (aboutwhat); cout << person.getSubject(); программа просто печатает «Введите тему» ​​и завершает программу. – Jahaha

+0

@Jahaha Это другой вопрос. Вы спрашиваете другого. Но в целом у вас есть некоторая сигнатура функции, например 'void foo (const std :: string & word);' или 'void foo (std :: string & word)'; зависит, нужно ли изменять параметр или нет. –

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