所以基本上我试图在字符串中间添加一个字符。通常在类似Python的东西中,这将非常简单,但我真的不确定如何在C ++中实现这一点。我想要达到的目标是:
void converter(){
converted = ":regional_indicator_" + character + ":";
}
基本上,我试图在字符串中添加char类型的变量character
。我应该将字符存储为字符串吗?
在这里参考我的所有代码:
#include <iostream>
using namespace std;
string inputLine;
char character;
string converted;
void input(){
cout << "Please input the text in which you would like to be converted" << endl;
cin >> inputLine;
}
void converter(){
converted = ":regional_indicator_" + character + ":";
}
int main(){
input();
for (int i = 0; i < inputLine.length(); i++ ){
character = tolower(inputLine[i]);
}
return 0;
}
答案 0 :(得分:3)
在字符串文字后面附加s
,将其视为std::string
而不是const char*
s:
converted = ":regional_indicator_"s + character + ":"s;
您需要执行using namespace std::literals
或using namespace std::string_literals
才能使其正常工作。
另外,在C ++中,使用另一个全局变量来修改全局变量的函数converter()
是很奇怪的。您可能需要考虑将character
作为参数传递给函数。
答案 1 :(得分:2)
你可以这样做:
converted = ":regional_indicator_" + std::string(1, character) + ":";
这是有效的,因为向字符串添加字符串文字(const char *
)会产生字符串。但是添加const char *
和char会导致指针运算。所以,通过构建一个std::string
来自&#34;字符&#34;您最终得到const char *
+ std::string
产生一个字符串,然后std::string
+ const char *
再次产生一个字符串作为最终结果。
答案 2 :(得分:1)
您可以通过使用以下来避免调用std :: string()构造函数和内存分配。我在发布之前对此进行了测试并且有效:
void converter(){
converted = ":regional_indicator_";
converted.push_back(character);
converted.push_back(':');
}
它更好,因为“转换”已经预留了一些额外的内存,所以你只需要用两个以上的字符填充额外的内存,而不会分配新的内存。
答案 3 :(得分:0)
构建字符串的方法是使用std::ostringstream这样的:
void converter(){
std::ostringstream oss;
oss << ":regional_indicator_" << character << ":";
converted = oss.str(); // copy the string out
// ... etc ...
}
该方法的另一个优点是它也可以自动将数字转换为字符串。
这不是最快的方式,所以如果速度很重要,我会利用这种串联的静态特性:
std::string converter(){
static char* template = ":regional_indicator_X:";
template[20] = character; // replace the `X` with your character
converted.assign(template, 21); // assign your string all at once
// ... etc ...
}
这是有效的,因为你的字符串是固定长度的。如果需要线程安全,您可以使用thread_local static char* template...
。