gpt4 book ai didi

c++ - istringstream 的五倍输出

转载 作者:行者123 更新时间:2023-11-30 03:30:11 27 4
gpt4 key购买 nike

我想在检测到某个子字符串后输出每一行。不知何故,我得到了 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 次(因为有五个“子字符串”),因此您将获得 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;
}
}

关于c++ - istringstream 的五倍输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45189422/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com