如何在c ++中使用字符串getline从文本文件中读取时忽略/跳过空格

时间:2016-08-23 13:54:18

标签: c++ string whitespace getline

您好我正在尝试开发一个可以从文本文件中读取的程序,例如

Edward Elric : 2000 300 3000 300
Super Trunks : 100 300 4000 900
Saitama Genos:
Goku Black: 12 333 33 

我希望程序开始读取每行中的分数,但跳过空格,例如每条记录最多有4个分数,但有些记录的分数少于4分,用空格表示,我希望程序读取这些记录滑动白色空间我希望这个重复,直到下面的文件结尾是我为这部分编写的代码我很困惑,我将如何继续这样做,所有的帮助表示赞赏

3 个答案:

答案 0 :(得分:0)

我会改变你的程序的一些事情

  • 使用std::ws有效地放弃对std::getline的读取之间的换行符:

    for(std::string line; std::getline(file>> std::ws, line);)

  • 跟踪您能够在value中读取的值的数量:

    std::istringstream f(scores);
    size_t values_read = 0;
    while(f >> values[values_read] && ++values_read < 4)
    {
    }
    for (size_t i = 0; i < values_read; ++i)
        std::cout << values[i] << " ";
    std::cout << std::endl;
    

Live Demo

输出:

  

2000 300 3000 300
  100 300 4000 900
  
  12 333 33

答案 1 :(得分:0)

我认为你可以使用std::getline来获得更大的优势,因为它不会获得它将读取到你指定的字符的行。例如冒号(:):

for(std::string line; std::getline(file, line);)
{
    // turn the line into a stream
    std::istringstream f(line);

    std::getline(f, line, ':'); // skip past ':'

    // read all the numbers one at a time
    for(int v; f >> v;)
        std::cout << v << ' ';

    std::cout << '\n';
}

<强>输出:

2000 300 3000 300 

100 300 4000 900 



12 333 33 

答案 2 :(得分:0)

也许使用来自std::vector的真棒#include <vector>,如下所示:

int main()
{
    string SampleStr = "2000 300 3000 300";
    vector<string> valuesSeperated;
    string temp;

    for(int i = 0; i < SampleStr.size(); i++)
    {
        if(SampleStr[i] == ' '|| SampleStr[i] == '\n')
        {
            valuesSeperated.push_back(temp);
            temp.clear();
        }
        else
            temp.push_back(SampleStr[i]);
    }
    return 0;   
}