istringstream 的五倍输出
Fivefold output from istringstream
我想在检测到某个子字符串后输出每一行。不知何故,我得到了 iss
的五倍输出。这是我的代码:
//load all data from txt
string data;
std::ifstream infile("SavedData.txt");
while (std::getline(infile, data)) {
std::istringstream iss(data);
string d;
while (iss >> d) {
//extract substring
unsigned firstBracket = data.find("(");
unsigned lastBracket = data.find(")");
string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1);
cout << coordSynth << endl;
}
}
现在的输出是这样的:
0.0, 45.0, -390.0
0.0, 45.0, -390.0
0.0, 45.0, -390.0
0.0, 45.0, -390.0
0.0, 45.0, -390.0
0.0, 45.0, -314.3
0.0, 45.0, -314.3
0.0, 45.0, -314.3
0.0, 45.0, -314.3
0.0, 45.0, -314.3
etc.
其实我只是想要
0.0, 45.0, -390.0
0.0, 45.0, -314.3
0.0, 45.0, -277.3
etc.
不,在 txt 文件中没有重复项。该文件如下所示:
0001(0.0, 45.0, -390.0).png
0003(0.0, 45.0, -314.3).png
0007(0.0, 45.0, -277.3).png (and so on...)
你的问题是
unsigned firstBracket = data.find("(");
unsigned lastBracket = data.find(")");
string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1);
cout << coordSynth << endl;
从 0001(0.0, 45.0, -390.0).png
获取 0.0, 45.0, -390.0
的逻辑是在一个 while 循环中,您甚至什么都不做。该循环将为每一行输入执行 5 次(因为有五个 "sub strings"),因此您将获得 5 个输出。您需要做的就是摆脱 while 循环,因为您没有对该行中包含的各个字符串执行任何操作。这给你类似
的东西
int main()
{
std::string data;
std::istringstream infile("0001(0.0, 45.0, -390.0).png\n0003(0.0, 45.0, -314.3).png\n0007(0.0, 45.0, -277.3).png\n");
while (std::getline(infile, data)) {
std::istringstream iss(data);
std::string d;
//extract substring
unsigned firstBracket = data.find("(");
unsigned lastBracket = data.find(")");
std::string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1);
std::cout << coordSynth << std::endl;
}
}
我想在检测到某个子字符串后输出每一行。不知何故,我得到了 iss
的五倍输出。这是我的代码:
//load all data from txt
string data;
std::ifstream infile("SavedData.txt");
while (std::getline(infile, data)) {
std::istringstream iss(data);
string d;
while (iss >> d) {
//extract substring
unsigned firstBracket = data.find("(");
unsigned lastBracket = data.find(")");
string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1);
cout << coordSynth << endl;
}
}
现在的输出是这样的:
0.0, 45.0, -390.0
0.0, 45.0, -390.0
0.0, 45.0, -390.0
0.0, 45.0, -390.0
0.0, 45.0, -390.0
0.0, 45.0, -314.3
0.0, 45.0, -314.3
0.0, 45.0, -314.3
0.0, 45.0, -314.3
0.0, 45.0, -314.3
etc.
其实我只是想要
0.0, 45.0, -390.0
0.0, 45.0, -314.3
0.0, 45.0, -277.3
etc.
不,在 txt 文件中没有重复项。该文件如下所示:
0001(0.0, 45.0, -390.0).png
0003(0.0, 45.0, -314.3).png
0007(0.0, 45.0, -277.3).png (and so on...)
你的问题是
unsigned firstBracket = data.find("(");
unsigned lastBracket = data.find(")");
string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1);
cout << coordSynth << endl;
从 0001(0.0, 45.0, -390.0).png
获取 0.0, 45.0, -390.0
的逻辑是在一个 while 循环中,您甚至什么都不做。该循环将为每一行输入执行 5 次(因为有五个 "sub strings"),因此您将获得 5 个输出。您需要做的就是摆脱 while 循环,因为您没有对该行中包含的各个字符串执行任何操作。这给你类似
int main()
{
std::string data;
std::istringstream infile("0001(0.0, 45.0, -390.0).png\n0003(0.0, 45.0, -314.3).png\n0007(0.0, 45.0, -277.3).png\n");
while (std::getline(infile, data)) {
std::istringstream iss(data);
std::string d;
//extract substring
unsigned firstBracket = data.find("(");
unsigned lastBracket = data.find(")");
std::string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1);
std::cout << coordSynth << std::endl;
}
}