我知道这是非常基本的,但我对C ++很新,似乎无法找到答案。我只是想将一些整数转换为字符串。这种方法有效:
int a = 10;
stringstream ss;
ss << a;
string str = ss.str();
但是当我需要像这样转换第二个和第三个时:
int b = 13;
stringstream ss;
ss << a;
string str2 = ss.str();
int c = 15;
stringstream ss;
ss << b;
string str3 = ss.str();
我收到此错误:
'std::stringstream ss' previously declared here
我需要以某种方式关闭stringstream吗?我注意到如果我在代码中将它们彼此远离,编译器并不介意,但这似乎不是我应该做的事情。有没有人有建议?
答案 0 :(得分:9)
您正在尝试重新声明具有相同名称的相同字符串流。您可以像这样修改代码以便工作:
int b = 13;
stringstream ss2;
ss2 << a;
string str2 = ss2.str();
如果您不想重新声明它,或者像这样:
int b = 13;
ss.str(""); // empty the stringstream
ss.clear();
ss << a;
string str2 = ss.str();
你也可以使用,这要快得多:
int c = 42;
std::string s = std::to_string(c);
答案 1 :(得分:3)
stringstream
就像其他任何变量一样。为了使成语无需更改,可以将其放在括号中:
int a = 13;
string str2;
{
stringstream ss;
ss << a;
str2 = ss.str();
} // ss ceases to exist at the closing brace
int b = 15;
string str3;
{
stringstream ss; // now we can make a new ss
ss << b;
str3 = ss.str();
}
从C ++ 11开始,你可以做到
std::string str4 = std::to_string( b );
或(任意类型的c
)
std::string str5 = ( std::stringstream() << c ).str();
当然还有其他解决方案。
答案 2 :(得分:1)
试
#include <string>
int a = 10;
std::string s = std::to_string(a);
答案 3 :(得分:1)
您遇到的特定错误告诉您,您无法在同一范围内声明两个名称相同的变量(在您的情况下为ss
)。
如果您想要创建新的stringstream
,可以将其称为其他内容。
但是还有其他方法可以将int转换为字符串..您可以使用std::to_string()。
答案 4 :(得分:0)
请务必声明:
using namespace std;
然后插入代码:
int a = 10;
ostringstream ssa;
ssa << a;
string str = ssa.str();
int b = 13;
ostringstream ssb;
ssb << b;
string str2 = ssb.str();
int c = 15;
ostringstream ssc;
ssc << c;
string str3 = ssc.str();
答案 5 :(得分:0)
我能想到的最简单的方法之一是:
string str = string(itoa(num));