使用getline跳过空白字符

8

我正在制作一个用于生成问题表单的程序。这些问题将被保存到文件中,我希望能够读取它们并将其存储在内存中(我使用向量来实现这一点)。 我的问题形式如下:

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

我的问题是,当我从文件中读取这些问题时,我使用getline读取一行,然后将其转换为stringstream,读取问题的数字和类型,然后再次使用getline,在stringstream上读取剩余的问题。 但是这样做的问题是,它也会读取问题前面的空格,当我把问题保存到文件中再次运行程序时,问题前面就会有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函数能够忽略空格吗?


所以,在将其发送到“Question”之前,请擦除前导空格(显然,“Question”有一个名为“Question”的嵌套类..有趣)。 - WhozCraig
@WhozCraig 抱歉,我犯了一个错误..正在修复! - JNevens
2个回答

31

看这个链接并使用:

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

5

不,getline不会忽略空格。但是你可以在使用getline之前添加一些代码来跳过空格。例如:

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

不过大概就是这样了。

相关内容涉及IT技术方面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接