如何构建字符串向量(包含空格)?

时间:2017-08-27 08:32:58

标签: c++ string getline

我正在尝试构建一个字符串向量。 一些字符串还包含空格。 这就是我使用getline(cin,string_name)的原因。 我的代码看起来像

      for(int i=0;i<n;++i)
        {
            getline(cin, s);
            vec.push_back(s);

        }

当我接受输入时

ADAM BOB JOHNSON

取两个输入词后停止,显示的矢量内容为

(HERE SPACE IS DISPLAYED)ADAM BOB

它是什么意思。它是否将NULL字符串作为第一个字符串的输入? 如果有人告诉我如何取出字符串并显示它,那将会非常有用。谢谢。

1 个答案:

答案 0 :(得分:1)

作者Abhijit, 显然,您的信息还不够。假设你的代码是用C ++编写的,我做了这个测试cpp:

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

int main()
{
    std::vector<std::string> vec;
    std::string s;
    int n = 1;
    for(int i = 0; i < n; ++i)
    {
        getline(std::cin, s);
        vec.push_back(s);

        std::cout << vec.at(i) << std::endl;
    }

    return 0;
}

使用g ++编译并在输入时使用“ADAM BOB JOHNSON”字符串。一切按计划进行,输出与输入完全相同。所以我在这里看不到任何错误。

很抱歉,由于目前声誉不足,无法发表评论。

UPD:发现了这个问题。 getline首先获得'\ n',我们在'3'之后离开(这是std :: cin&gt;&gt; n;所需的)因此,你只需要忽略一个字符串。代码:

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

int main()
{
    int n;
    std::cin >> n;


    std::vector<std::string> vec;
    std::string s;
    std::getline(std::cin, s);

    for(int i = 0; i < n; ++i)
    {
        std::getline(std::cin, s);
        vec.push_back(s);

        // std::cout << vec.at(i) << std::endl;
    }
    for(int i=0;i<n;++i){

        std::cout << vec[i] <<" " << std::endl;
    }




    return 0;

}

对我来说很好。

是的,@ pmaxim98首先做到了,抱歉,正在编辑回复并没有看到你的评论。