使用getline跳过空格

时间:2013-11-18 10:41:32

标签: c++ string whitespace getline stringstream

我正在制作一个程序来制作问题表格。问题保存到文件中,我想读取它们并将它们存储在内存中(我使用了一个向量)。 我的问题有以下形式:

1 TEXT What is your name?
2 CHOICE Are you ready for these questions?
Yes
No

我的问题是,当我从文件中读取这些问题时,我使用getline读取一行,然后将其转换为字符串流,读取问题的数量和类型,然后再次使用getline,这一次,串流,阅读其余的问题。 但它的作用是,它还会读出问题前面的空白区域,当我再次将问题保存到文件中并再次运行程序时,问题前面有2个空格,之后有3个空格和等......

这是我的一段代码:

getline(file, line);
std::stringstream ss(line);
int nmbr;
std::string type;
ss >> nmbr >> type;
if (type == "TEXT") {
    std::string question;
    getline(ss, question);
    Question q(type, question);
    memory.add(q);

关于如何解决这个问题的任何想法? getline可以忽略空格吗?

2 个答案:

答案 0 :(得分:20)

查看this并使用:

ss >> std::ws;
getline(ss, question);

答案 1 :(得分:5)

没有getline不会忽略空格。但在使用getline之前,没有什么可以阻止你添加一些代码来跳过空格。例如

    while (ss.peek() == ' ') // skip spaces
        ss.get();
    getline(ss, question);

无论如何都要这样。