我对这个看似简单的问题感到十分困惑。
我有一个痛苦的老字符,我想在字符串的中间连接它。 像这样。
string missingOptionArg(char missingArg) {
return "Option -" + missingArg + " requires an operand";
}
我猜测+操作数足够聪明,可以处理这种琐碎的事情,如果没有,最简单的方法是什么?
答案 0 :(得分:3)
连接字符串文字和char:
std::string miString = std::string("something") + c;
当您需要连接两个字符串文字时,会发生类似的事情。
请注意"something"
不是std::string
,它是指向字符数组的指针。然后你不能使用+连接两个字符串文字,这将添加两个指针,而不是你想要的。
您的代码更正是在Igor的评论中。
答案 1 :(得分:1)
接受的答案是实现连接的最简单但其他方法。
#include <iostream>
#include <string>
using namespace std;
string missingOptionArgRet(char missingArg) {
string s("Option -");
s += missingArg;
s += " requires an operand";
return s;
}
void missingOptionArgOut(char missingArg, std::string* out) {
*out = "Option -";
*out += missingArg;
*out += " requires an operand";
}
main(int, char**)
{
string s1 = missingOptionArgRet('x');
string s2;
missingOptionArgOut('x', &s2);
cout << "s1 = " << s1 << '\n';
cout << "s2 = " << s2 << '\n';
}
使用+=
而不是+
将阻止临时字符串对象。还有2个选项。按值missingOptionArgRet
返回。这样做的缺点是,由于按值返回,必须将字符串复制到调用者。
第二个选项missingOptionArgOut
可以以稍微冗长的代码为代价来防止这种情况发生。我传入一个已构造的string
(通过指针清楚地表明它是一个要修改的变量,但可以通过引用传递)。