在C ++中连接字符串和布尔值?

时间:2012-08-14 13:20:47

标签: c++ string char boolean concatenation

我想做以下事情:

bool b = ...
string s = "Value of bool is: " + b ? "f" : "d";

我见过的所有例子都使用cout,但我不想打印字符串;只是存储它。

我该怎么办?如果可能,我想要一个分配给char *和一个std::string的示例。

9 个答案:

答案 0 :(得分:7)

如果您的编译器足够新,它应该有std::to_string

string s = "Value of bool is: " + std::to_string(b);

这当然会将"1"(对于true)或"0"(对于false)附加到您的字符串,而不是{{1您想要的或"f"。原因是ther不是"d"的重载,它采用std::to_string类型,因此编译器将其转换为整数值。

你当然可以分两步完成,首先声明字符串,然后附加值:

bool

或者像现在这样做,但明确地将第二个创建为string s = "Value of bool is: "; s += b ? "f" : "d";

std::string

修改:如何从string s = "Value of bool is: " + std::string(b ? "f" : "d");

获取char指针

这是使用std::string::c_str方法完成的。但正如Pete Becker所指出的,你必须小心如何使用这个指针,因为它指向字符串对象内的数据。如果对象被破坏,那么数据和指针(如果已保存)现在将无效。

答案 1 :(得分:5)

使用ostringstream

std::ostringstream s;
s << "Value of bool is: " << b;
std::string str(s.str());

您可以使用std::boolalpha"true""false"代替int代表:

s << std::boolalpha << "Value of bool is: " << b;

请注意,发布的代码几乎是正确的(不能+两个char[]}:

std::string s = std::string("Value of bool is: ") + (b ? "t" : "f");

要分配给char[],您可以使用snprintf()

char buf[1024];
std::snprintf(buf, 1024, "Value of bool is: %c", b ? 't' : 'f');

或只是std::string::c_str()

答案 2 :(得分:4)

足够简单:

std::string s = std::string("Value of bool is: ") + (b ? "f" : "d");

答案 3 :(得分:2)

我会使用std::stringstream

std::stringstream ss;
ss << s << (b ? "f" : "d");
std::string resulting_string = ss.str();

stringstream reference

答案 4 :(得分:2)

分两步执行操作:

bool b = ...
string s = "Value of bool is: ";
s+= b ? "f" : "d";

这是必要的,因为否则你会尝试将两个const char *相加,这是不允许的;这样,您依赖+=运算符对std::string和C字符串的重载。

答案 5 :(得分:2)

简单:

bool b = ...
string s = "Value of bool is: ";
if (b)
  s += "f";
else
  s += "d";

答案 6 :(得分:1)

您也可以使用strcat()

char s[80];
strcpy(s, "Value of bool is ");
strcat(s, b?"f":"d");

答案 7 :(得分:1)

包封物:

std::string toString(const bool value)
{
    return value ? "true" : "false";
}

然后:

std::string text = "Value of bool is: " + toString(b);

答案 8 :(得分:0)

对于这个简单的用例,只需将一个字符串附加到另一个字符串:

std::string text = std::string("Value of bool is: ").append( value? "true" : "false" ); 

现在,对于更通用的解决方案,您可以创建字符串构建器类:

class make_string {
   std::ostringstream st;
   template <typename T>
   make_string& operator()( T const & v ) {
       st << v;
   }
   operator std::string() {
       return st.str();
   }
};

可以轻松扩展以支持操纵器(添加一些额外的重载),但这对于大多数基本用途来说已足够。然后将其用作:

std::string msg = make_string() << "Value of bool is " << (value?"true":"false");

(同样,在这种特殊情况下,它是矫枉过正,但如果你想组成一个更复杂的字符串,那将会很有帮助。)