如何追加一个字符到一个std ::string?

以下失败与错误prog.cpp:5:13: error: invalid conversion from 'char' to 'const char*'

 int main() { char d = 'd'; std::string y("Hello worl"); y.append(d); // Line 5 - this fails std::cout << y; return 0; } 

我也试过了,下面是编译但是在运行时随机performance的:

 int main() { char d[1] = { 'd' }; std::string y("Hello worl"); y.append(d); std::cout << y; return 0; } 

对不起,这个愚蠢的问题,但我已经search谷歌,我可以看到只是“字符数组到字符数组”,“字符数组到字符数组”,等等。

 y += d; 

我会使用+=运算符而不是命名函数。

使用push_back()

 std::string y("Hello worl"); y.push_back('d') std::cout << y; 

要使用append方法将字符添加到std :: string var,您需要使用此重载:

 std::string::append(size_type _Count, char _Ch) 

编辑:你是对的我误解了上下文帮助中显示的size_type参数。 这是要添加的字符数。 所以正确的电话是

 s.append(1, d); 

 s.append(sizeof(char), d); 

或者最简单的方法:

 s += d; 

除了上面提到的其他string之外,其中一个string构造函数还有一个字符和该字符的重复次数。 所以你可以使用它附加一个字符。

 std::string s = "hell"; s += std::string(1, 'o'); 

尝试+ =运算符链接文本 ,append()方法链接文本或push_back()方法链接文本

本文中的链接还包含如何使用各自API的示例。

我通过将它们运行成一个大循环来testing这几个命题。 我用微软的Visual Studio 2015作为编译器,我的处理器是i7,8Hz,2GHz。

  long start = clock(); int a = 0; //100000000 std::string ret; for (int i = 0; i < 60000000; i++) { ret.append(1, ' '); //ret += ' '; //ret.push_back(' '); //ret.insert(ret.end(), 1, ' '); //ret.resize(ret.size() + 1, ' '); } long stop = clock(); long test = stop - start; return 0; 

根据这个testing,结果是:

  operation time(ms) note ------------------------------------------------------------------------ append 66015 += 67328 1.02 time slower than 'append' resize 83867 1.27 time slower than 'append' push_back & insert 90000 more than 1.36 time slower than 'append' 

结论

+=似乎更容易理解,但如果你介意速度,请使用append

问题在于:

 std::string y("Hello worl"); y.push_back('d') std::cout << y; 

是你必须有'd'而不是使用char的名字,如char d ='d'; 还是我错了?

 int main() { char d = 'd'; std::string y("Hello worl"); y += d; y.push_back(d); y.append(1, d); //appending the character 1 time y.insert(y.end(), 1, d); //appending the character 1 time y.resize(y.size()+1, d); //appending the character 1 time y += std::string(1, d); //appending the character 1 time } 

请注意,在所有这些例子中,您可以直接使用字符字面值: y += 'd';

由于不相关的原因,你的第二个例子几乎可以工作。 char d[1] = { 'd'}; 没有工作,但char d[2] = { 'd'}; (注意这个数组的大小是2)与const char* d = "d";大致相同const char* d = "d";可以附加一个string文字: y.append(d);

尝试使用d作为指针y.append(* d)

 str.append(10u,'d'); //appends character d 10 times 

注意我已经写了10u,而不是10次,我想追加这个angular色。 用任何数字代替10。

如果使用push_back,则不会调用string构造函数。 否则它将通过强制转换创build一个string对象,然后将该string中的字符添加到另一个string中。 对一个小angular色来说太麻烦了;)