用C ++读取带空格的行

时间:2017-10-29 05:39:57

标签: c++ c++11

我应该逐行读取一个文本文件,提取三个变量:

1- int index -> index of list
2- string name -> name of a person
3- string gift -> Christmas gift

一个例子:

1 Robert XBox360 Gaming Console 
2 Harold Dress Shirt

因此对于第一行index = 1 , name = Robert , gift = XBox360 Gaming Console

这就是我一直在做的事情:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>


int main() {
    std::ifstream infile("giftlist.txt");
    std::string line;
    while (std::getline(infile, line))
    {
        std::istringstream iss(line);
        int index;
        std:: string name, gift;
        if (!(iss >> index >> name >> gift)) { break; } // error

        std::cout << index << " "<< name << " " << gift << std::endl;
    }
    return 0;
}

输出:

1 Robert XBox360

因此,它不会读取礼品行的其余部分,而是停留在空白处(i.e gift = XBox360)。如何解决此问题以阅读礼品名称的其余部分?感谢

1 个答案:

答案 0 :(得分:0)

这取决于名称是否始终在一个单词中,以及白色空格是否始终为空格(或者如果它可以替换它们)。这样的事情可以帮到你:

    std:: string name, gift, more;
    if (!(iss >> index >> name >> gift)) { break; } // error
    while (iss >> more) { gift += " "+more; }

但如果名字可能是&#34; John Smith&#34;那么你很难确定名字的结束和礼物的开始。