C++ 如何在C++;另外两个?

C++ 如何在C++;另外两个?,c++,string,C++,String,我想通过这两个字符串创建stringhello1world: string s1 = "hello" string s2 = "world" 我这样做: string my_str; sprintf(my_str, "%s1%s", s1, s2); 但我有一个错误: error: cannot convert ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘char*’ for argumen

我想通过这两个字符串创建
string
hello1world

string s1 = "hello"
string s2 = "world" 
我这样做:

string my_str;
sprintf(my_str, "%s1%s", s1, s2);
但我有一个错误:

error: cannot convert ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘char*’ for argument ‘1’ to ‘int sprintf(char*, const char*, ...)’
     sprintf(my_str, "%s1%s", s1, s2);
错误:无法将参数“1”的“std::_cxx11::string{aka std::_cxx11::basic_string}”转换为“char*”,将其转换为“int sprintf(char*,const char*,…)”
sprintf(我的头,“%s1%s”,s1,s2);

如何正确操作?

请不要使用
sprintf
。它只支持
char[]
字符串,即C字符串。因此,当您传递
std::string
时,它不会编译

使用
std::string
,您只需要一个简单的
+

string my_str = s1 + s2;

如果要连接这两个字符串,可以使用
std::string

string s1 = "hello";
string s2 = "world";
string my_str = s1 + "1" + s2;

对于两个字符串的格式设置,请使用
运算符+=

std::string myStr(s1 + "1" + s2);
如果需要对多个字符串进行格式化,更有效的方法是:

std::string myStr;
myStr.reserve(1048576);      // Reserve space in buffer to prevent reallocation
while (<many iterations>)
{
  myStr.append(s1);
  myStr.append("1");
  // Do more formatting here
  myStr.append(s2);
}

我需要提一提(感谢@IInspectable的提示)
std::stringstream
is.C++11为使用运算符进行数字格式化提供了更好的方法。

您有很多事情要做,您可以使用运算符+

string a = "hello";
string b = "world";
string ans = a + "1" + b;
您可以使用string::append

  string a = "hello";
  string b = "world";
  string ans = "";
  ans.append(a);
  ans.append("1");
  ans.append(b);
string a = "hello";
string b = "world";
a.insert(a.size(),1,'1');
a.insert(a.size(),b);
您可以使用insert,但不能在concate中使用PERFERD。更好地使用+运算符或append

  string a = "hello";
  string b = "world";
  string ans = "";
  ans.append(a);
  ans.append("1");
  ans.append(b);
string a = "hello";
string b = "world";
a.insert(a.size(),1,'1');
a.insert(a.size(),b);
使用字符串插入将其用作字符串::插入(索引,字符串);

使用字符将其用作字符串::insert(index,len,char);

我建议您检查一下,例如。查看重载运算符。我相信您可以找到一些有用的方法来添加两个字符串。请了解C功能和C++功能(您的混合是完全错误的)。抱歉,但这并不能解决问题。问题是请求帮助从现有字符串对象创建新的字符串对象。好的,我给出了两个答案,一个使用“附加”,另一个使用“运算符+”将新字符串连接起来,并给出第三个解决方案,即“插入”以生成多个选项?您复制了其他人的答案,当我写我的评论时。现在这真的很可怜。不,我不这么做?!!!!你不是认真的…-1,对不起。@I不可检测我知道
stringstream
不是很快,但现在我看到它几乎比
operator+
慢4倍。谢谢你的评论。我在答案中包含了这方面的提示,并添加了更快的方法。实际上我并不是在评论性能。无论如何,性能在不同的实现中是不同的。然而,建议字符串流连接字符串是如此的复杂和不直观,以至于我无法想象这样的想法会引起混乱。无论如何,我在您的更新后撤销了否决票。@IInspectable I agree、 最初的帖子并没有很好地反映我的想法,我提出了
stringstream
的例子,当结果中应该包含非字符串值时。原因是
1
的格式为string
“%s1%s”
。我认为打印字符串以外的内容会很有用。