C++将整数转换为字符串

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

我需要关闭stringstream吗?我注意到如果我在代码中将它们放得很远,编译器并不介意,但这似乎不是我应该做的事情。请问有什么建议吗?


你是在使用stringstream将int转换为string吗?你应该尝试使用std::to_string。 - d.moncada
我尝试使用to_string,但我的编译器无法理解它。我收到了这个错误:无法解析函数“to_string”。我确保我还使用了#include <iostream>和#include <string>。 - Erk
将字符串头添加到您的代码中。请参考我的示例: - d.moncada
尝试使用 std::to_string(int) 函数,它会正常工作。 - Shravan40
可能是重复的问题:如何在C++中将数字转换为字符串,反之亦然 - KillianDS
显示剩余2条评论
6个回答

9

您正在试图使用相同的名称重新声明相同的stringstream。您可以按照以下方式修改代码以使其工作:

 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);

@JavaRunner,不使用std::to_string的其他原因吗?我现在考虑用to_string替换用于一个值的stringstreams,但不确定这是否是个好主意。 - sukhmel

3
< p > 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();

当然还有其他解决方案。

谢谢提供信息。我按照那种方式操作时没有出现错误,但是当我尝试在代码后面使用括号外的字符串时,它说这些字符串在此范围内未定义。不过我想我解决了我的问题,我只是打算为每个stringstream使用不同的名称。 - Erk
请注意,我在大括号外声明了字符串。另外,您可能考虑将其放入函数中进行重构。 (您甚至可以将该函数称为“to_string”以简化最终迁移到C++11的过程。)复制粘贴的代码更难维护。 - Potatoswatter
“(std::stringstream() << b).str()” 这个惯用法是如何工作的?据我所见,“<<”返回一个没有“str()”的“ostream&”。 - Trygve Flathen
1
在C++11之前,std::stringstream() << b会将流作为std::ostream &左值引用,不接受临时对象。当右值引用被添加到语言中后,库中添加了一个通用重载,因此我应该更新答案。 - Potatoswatter

1
你遇到的错误告诉你,在同一作用域内无法声明两个同名变量(在你的情况下为ss)。
如果你想创建一个新的stringstream,你可以给它起一个不同的名字。
但是还有其他方法将int转换为字符串…你可以使用std :: to_string()

1
尝试
#include <string>

int a = 10;
std::string s = std::to_string(a);

我尝试了使用to_string,但我的编译器无法理解它。我收到了这个错误:无法解析函数'to_string'。我确保我还使用了#include <iostream>和#include <string>。 - Erk
你的开发环境是什么? - d.moncada
我已经有了 #include <string> 语句。我在 macOS 上使用 Eclipse。 - Erk
看看这个SO帖子:https://dev59.com/lWsz5IYBdhLWcg3wbHPG ...但听起来你的路径可能设置不正确。 - d.moncada

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();

0

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

string str = string(itoa(num));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接