C ++从1字符转换为字符串?[关闭]


121

我只需要投1 charstring。相反的方法很简单str[0]

以下对我不起作用:

char c = 34;
string(1,c);
//this doesn't work, the string is always empty.

string s(c);
//also doesn't work.

boost::lexical_cast<string>((int)c);
//also doesn't work.


10
是什么让您认为string(1, c)不起作用?这是正确的方法。
templatetypedef

1
您正在使用哪个编译器?什么环境。也许这是编译器的错误。
莫里斯·里夫斯

libc ++ abi.dylib:终止引发异常
weeo13年

3
@ weeo-错误可能在程序中的其他地方。请发布一个独立的,可复制的示例来演示错误,以便我们帮助您找出问题所在。
templatetypedef

Answers:


184

所有的

std::string s(1, c); std::cout << s << std::endl;

std::cout << std::string(1, c) << std::endl;

std::string s; s.push_back(c); std::cout << s << std::endl;

为我工作。


4
最简单的方法是:字符串s =“” + c;
Doctorram

17
@doctorram不!1.您使用的引号无效的C ++;2.即使您的意思s = "" + c是只是UB,因为它并不意味着“用字​​符连接空字符串c”,它的意思是“指向空字符串的某些副本的指针,该指针以数字的值超前c(这绝对不是您所用的3.)如果您的意思是s = ""s + c,它还比s{1, c}... 更长(并且您必须在using std::literals;某个地方写东西……)
Massa

11
抱歉,我的意思是:string s = string()+'a';
doctorram

1
我无法删除对该错误评论的支持...
杰克·OPJ,

10

老实说,我认为铸造方法会很好用。既然没有,您可以尝试stringstream。下面是一个示例:

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

2
我认为这个特定的字符串构造函数无法正常工作的事实与真正的问题无关。
克里斯,

1
大概是正确的,但我想我会提供一个简单的答案:P
Mallen 2013年

此解决方案有效,但是<sstream>不必使用stringstream(),因为它将在项目中包含整个库,从而减慢了编译过程。尽量避免对项目包括不必要的依赖项。
克里斯蒂安
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.