3

我知道这是非常基本的,但我对 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

我需要以某种方式关闭字符串流吗?我注意到,如果我在代码中将它们彼此远离,编译器不会介意,但这似乎不是我应该做的事情。有人有建议吗?

4

6 回答 6

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);
于 2013-03-13T02:38:41.623 回答
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();

当然,还有其他解决方案。

于 2013-03-13T02:34:01.753 回答
1

尝试

#include <string>

int a = 10;
std::string s = std::to_string(a);
于 2013-03-13T02:33:13.693 回答
1

您遇到的特定错误是告诉您不能ss在同一范围内声明两个具有相同名称(在您的情况下)的变量。

如果你想创建一个新的stringstream,你可以把它叫做别的东西。

但是还有其他方法可以将 int 转换为字符串。您可以使用std::to_string()

于 2013-03-13T02:34:01.407 回答
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();
于 2013-09-29T16:27:03.017 回答
0

我能想到的最简单的方法之一是:

string str = string(itoa(num));
于 2014-06-25T11:46:12.627 回答