字符串成员不适用于由分隔符分隔的文件中的字符串

string members don't work with string from file separated by 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

这里的问题是,当您向 getline 提供自己的分隔符时,它会停止使用换行符作为分隔符。这意味着在你读入 Left1: 的第一个循环中,丢弃 : 并且 info 剩下 Left1。第二次迭代你再次阅读直到你看到 : 所以你读入 Right1\nLeft2:,丢弃 : 留下 infoRight1\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";  
}