连接普通字符和字符串?

Concatenate plain char and string?

我被这个看似简单的问题弄糊涂了。

我有一个痛苦的旧字符,我想把它连接在一个字符串的中间。 像这样。

string missingOptionArg(char missingArg) {
     return "Option -" + missingArg + " requires an operand";
}

我猜 + 操作数足够聪明来处理这种微不足道的事情,如果不是,那么最简单的方法是什么?

连接字符串文字和字符:

std::string miString = std::string("something") + c;

当您需要连接两个字符串文字时会发生类似的事情。

请注意 "something" 不是 std::string,它是指向字符数组的指针。然后你不能使用 + 连接两个字符串文字,这将添加两个指针,这不是你想要的。

您的代码更正在 Igor 的评论中。

接受的答案是最简单的,但还有其他实现串联的方法。

#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个选项。 Return 按值 missingOptionArgRet。这样做的缺点是,由于按值 return,必须将字符串复制到调用方。

第二个选项missingOptionArgOut可以以稍微冗长的代码为代价来防止这种情况。我传入一个已经构造好的string(通过指针来明确它是一个要修改的变量,但可以通过引用传递)。