gpt4 book ai didi

c++ - Stringstream清零麻烦

转载 作者:行者123 更新时间:2023-11-28 00:19:14 26 4
gpt4 key购买 nike

我正在使用 stringstream 将数字字符串转换为整数。我不知道为什么后面的代码不起作用。有人可以向我解释为什么我总是得到 tmp 变量的相等值吗?

#include <fstream>
#include <string>
#include <sstream>
#include <cctype>

int main() {
std::ifstream input("input.txt");
std::ofstream output("output.txt");
std::string str = "", line;
std::stringstream ss;
int tmp;
while (std::getline(input, line)) {
for (int i = 0, l = line.size(); i < l; i++) {
if (isdigit(line[i]))
str += line[i];
}
ss << str;
// gets int from stringstream
ss >> tmp;
output << str << ' ' << tmp << std::endl;
str = "";
// stringstream clearing
ss.str("");

}

return 0;
}

最佳答案

之后

ss >> tmp;

ss 在 EOF。在那之后没有任何阅读工作。您可以添加一行

ss.clear();

之后

ss.str("");

清除其内部状态。它会开始工作。我使用 if 语句来检验假设。

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <cctype>

int main() {
std::ifstream input("input.txt");
std::string str = "", line;
std::stringstream ss;
int tmp;
while (std::getline(input, line)) {
for (int i = 0, l = line.size(); i < l; i++) {
if (isdigit(line[i]))
str += line[i];
}
ss << str;
// gets int from stringstream
ss >> tmp;
std::cout << str << ' ' << tmp << std::endl;
str = "";
// stringstream clearing

if (ss.eof())
{
std::cout << "ss is at eof\n";
}

ss.str("");
ss.clear();

}

return 0;
}

关于c++ - Stringstream清零麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28420228/

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