Stringstream清零麻烦
Stringstream clearing trouble
我正在使用 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。 None 之后的读取工作。您可以添加一行
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;
}
要重置 std::stringstream
,您必须首先使用 std::basic_stringstream::str
and then reset the input position with std::basic_istream::seekg
设置缓冲区的内容,给出
ss.str(str);
ss.seekg(0);
ss >> tmp;
作为@R Sahu 提到的必须在每次迭代时清除 stringstream
的方法的替代方法,您可以在 while 循环内声明 std::stringstream ss
。这样,您可以在每次迭代结束时销毁变量,并在每次执行 while 循环时创建一个新变量。
#include <fstream>
#include <string>
#include <sstream>
#include <cctype>
int main()
{
std::ifstream input("input.txt");
std::ofstream output("output.txt");
std::string line;
while (std::getline(input, line))
{
std::string str;
std::stringstream ss;
int tmp;
for (int i = 0; i < line.size(); i++)
{
if (isdigit(line[i]))
str += line[i];
}
ss << str;
// gets int from stringstream
ss >> tmp;
output << str << " " << tmp << std::endl;
}
return 0;
}
我正在使用 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。 None 之后的读取工作。您可以添加一行
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;
}
要重置 std::stringstream
,您必须首先使用 std::basic_stringstream::str
and then reset the input position with std::basic_istream::seekg
设置缓冲区的内容,给出
ss.str(str);
ss.seekg(0);
ss >> tmp;
作为@R Sahu 提到的必须在每次迭代时清除 stringstream
的方法的替代方法,您可以在 while 循环内声明 std::stringstream ss
。这样,您可以在每次迭代结束时销毁变量,并在每次执行 while 循环时创建一个新变量。
#include <fstream>
#include <string>
#include <sstream>
#include <cctype>
int main()
{
std::ifstream input("input.txt");
std::ofstream output("output.txt");
std::string line;
while (std::getline(input, line))
{
std::string str;
std::stringstream ss;
int tmp;
for (int i = 0; i < line.size(); i++)
{
if (isdigit(line[i]))
str += line[i];
}
ss << str;
// gets int from stringstream
ss >> tmp;
output << str << " " << tmp << std::endl;
}
return 0;
}