字符串成员不适用于由分隔符分隔的文件中的字符串
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:
,丢弃 :
留下 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";
}
这段代码应该打印字符串的一部分和它的最后一个字符,但是分隔符 (:) 之后的第二部分只打印字符串而不是字符。为什么它不起作用,我该如何解决?
代码:
#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:
,丢弃 :
留下 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";
}