2015-08-11 4 views
0

С вводом в командной строке:sstream не заселять вектор C++

1 2 3 

, который хранится в «линии» мой вектор только заселяется с

1 

Что я делаю неправильно ? Вот код

string line; 
    string buffer; 
    int a,b,base; 

    cin >> line; 
    stringstream ss(line); 
    std::vector<string> tokens; 
    while(ss >> buffer){ 
     tokens.push_back(buffer); 
    } 
    for(int i=0; i<tokens.size(); i++){cout << tokens[i] << endl;} 
+2

Попробуйте заменить 'CIN >> линии;' 'с станд :: GetLine (CIN, линия);'. – Lingxi

ответ

4

Ваша проблема здесь:

cin >> line; 

Обратите внимание, что эта функция

operator>>(istream& is, string& str) 

получает все символы до первого появления пробельных символов (в случае ввода 1 2 3, он останавливается после пробега после 1)

Попробуйте использовать функцию getline(), которая считывает строку до первого появления новой строки.

Это похоже на работу:

#include <string> 
#include <iostream> 
#include <sstream> 
#include <vector> 

using namespace std; 

int main(void) { 
    string line; 
    string buffer; 
    int a,b,base; 

    getline(cin, line); 
    stringstream ss(line); 
    vector<string> tokens; 
    while(ss >> buffer){ 
     tokens.push_back(buffer); 
    } 
    for(int i=0; i<tokens.size(); i++){cout << tokens[i] << endl;} 

    return 0; 
}