连接普通的char和字符串?

时间:2015-05-18 01:33:48

标签: c++ string char concatenation

我对这个看似简单的问题感到十分困惑。

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

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

我猜测+操作数足够聪明,可以处理这种琐碎的事情,如果没有,最简单的方法是什么?

2 个答案:

答案 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(通过指针清楚地表明它是一个要修改的变量,但可以通过引用传递)。