连接普通字符和字符串?
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
(通过指针来明确它是一个要修改的变量,但可以通过引用传递)。
我被这个看似简单的问题弄糊涂了。
我有一个痛苦的旧字符,我想把它连接在一个字符串的中间。 像这样。
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
(通过指针来明确它是一个要修改的变量,但可以通过引用传递)。