在C ++中添加字符串之间的字符

时间:2017-06-05 13:11:53

标签: c++ string

所以基本上我试图在字符串中间添加一个字符。通常在类似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;
}

4 个答案:

答案 0 :(得分:3)

在字符串文字后面附加s,将其视为std::string而不是const char* s:

converted = ":regional_indicator_"s + character + ":"s;

您需要执行using namespace std::literalsusing 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...