1

我想做类似以下的事情:

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

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

我该怎么做?如果可能的话,我想要一个分配给 achar *和一个分配给 a 的示例std::string

4

9 回答 9

7

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

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

这当然会附加"1"(for true) 或"0"(for false) 到您的字符串,而不是"f""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");

编辑:如何charstd::string

这是通过std::string::c_str方法完成的。但正如 Pete Becker 所指出的,您必须小心如何使用此指针,因为它指向字符串对象内的数据。如果对象被销毁,数据也会被销毁,如果保存,指针现在将无效。

于 2012-08-14T13:25:11.503 回答
6

使用ostringstream

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

并且您可以使用std::boolalphato"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()

于 2012-08-14T13:23:26.777 回答
4

很简单:

std::string s = std::string("Value of bool is: ") + (b ? "f" : "d");
于 2012-08-14T13:32:33.970 回答
2

我会使用std::stringstream

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

字符串流参考

于 2012-08-14T13:23:17.177 回答
2

分两步执行操作:

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

这是必要的,因为否则您将尝试将两个相加const char *,这是不允许的;相反,这种方式依赖于+=运算符 forstd::string和 C 字符串的重载。

于 2012-08-14T13:25:54.293 回答
2

简单点:

bool b = ...
string s = "Value of bool is: ";
if (b)
  s += "f";
else
  s += "d";
于 2012-08-14T13:26:09.930 回答
2

封装:

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

然后:

std::string text = "Value of bool is: " + toString(b);
于 2012-08-14T13:37:25.480 回答
1

你也可以使用 strcat()

char s[80];
strcpy(s, "Value of bool is ");
strcat(s, b?"f":"d");
于 2012-08-14T13:26:26.777 回答
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");

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

于 2012-08-14T13:46:12.050 回答