字符串没有存储在向量中?

时间:2015-02-22 18:47:38

标签: c++ vector push-back

#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”但不,主要只是崩溃。为什么会发生这种情况?如何才能使整个字符串(包括空格)存储起来?

1 个答案:

答案 0 :(得分:3)

  

“为什么会发生这种情况,我如何制作它以便存储整个字符串(包括空格)?”

要从输入中获取多个单词,您应该使用

std::getline(cin,n);

而不是

std::cin >> n;

默认情况下,空格用作分隔符,因此std::istream operator>>的每次调用都只会将读取的文本存储到下一个空格字符中。


请查看您的计划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];
}