我想做以下事情:
bool b = ...
string s = "Value of bool is: " + b ? "f" : "d";
我见过的所有例子都使用cout
,但我不想打印字符串;只是存储它。
我该怎么办?如果可能,我想要一个分配给char *
和一个std::string
的示例。
答案 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)
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();
答案 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");
(同样,在这种特殊情况下,它是矫枉过正,但如果你想组成一个更复杂的字符串,那将会很有帮助。)