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”
。我认为打印字符串以外的内容会很有用。