字符串成员不能使用分隔符分隔文件中的字符串

时间:2018-12-06 17:11:21

标签: c++ ifstream

该代码应该打印字符串的一部分,它是最后一个字符,但是delimiter(:)之后的第二部分仅打印字符串而不是字符。为什么它不起作用,我该如何解决?

代码:

#include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;
string info;
void PrintTextFile(){
    ifstream myfile("example.txt");
    if(myfile.is_open()){
        while (getline(myfile, info, ':')){
            cout << info << "   " << info.back() << "\n";    
        }
        myfile.close();
    }
    else {
        cout << "Unable to open file.";
    }
}

int main(int argc, char *argv[]) {    
    PrintTextFile();
    return 0;
}

example.txt:

Left1:Right1
Left2:Right1
Left3:Right3

我的输出:

Left1        1
Right1
Left2        2
Right2
Left3        3
Right3

预期输出:

Left1        1
Right1       1
Left2        2
Right2       2
Left3        3
Right3       3

1 个答案:

答案 0 :(得分:3)

这里的问题是,当您为getline提供自己的定界符时,它将停止使用换行符作为定界符。这意味着在您的第一个循环中,您读入Left1:,丢弃:,而info剩下Left1。再次阅读第二次迭代,直到看到:,因此您读入Right1\nLeft2:,丢弃:,将info留给Right1\nLeft2

您需要做的是读入整行,然后使用字符串流将其解析出来

while (getline(myfile, info)){
    stringstream ss(info)
    while (getline(ss, info, ':') // this works now because eof will also stop getline
        cout << info << "   " << info.back() << "\n";    
}

或者因为您知道只需要两个值,所以可以像读取行的每个部分一样获得它们

while (getline(myfile, info, ':')){
    cout << info << "   " << info.back() << "\n";  
    getline(myfile, info);
    cout << info << "   " << info.back() << "\n";  
}