如何将一个字符添加到std::string中?

242

以下代码出错并提示: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;
}

我也尝试了以下代码,虽然编译通过,但在运行时表现不稳定:

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

非常抱歉问这个愚蠢的问题,但我已经在谷歌上搜索过了,只看到了"char数组转char指针"、"char指针转char数组"等内容。


1
编译器出错了,是的,我忘记了具体是哪个错误,但这很正常。 - Yana D. Nugraha
4
以下有更好的答案,但您可以通过以下方式使第二个示例正常工作:char d[2] = {'d',0};或者只需使用char d[2] = "d"。基本上,您需要一个0来终止传递给append的C风格字符串。 - sbk
这里有很好的文档:http://www.sgi.com/tech/stl/basic_string.html - Martin York
15个回答

1
我发现了一个简单的方法... 我需要把一个正在被动态构建的字符串与一个char连接起来。我需要一个char list;,因为我要让用户做出选择并在一个switch()语句中使用这个选择。
我只需添加另一个std::string Slist;并将新字符串设置为字符 "list" - a、b、c或任何最终用户选择的字符,如下所示:
char list;
std::string cmd, state[], Slist;
Slist = list; //set this string to the chosen char;
cmd = Slist + state[x] + "whatever";
system(cmd.c_str());

复杂性可能很酷,但简单性更酷。依我之见。

1
有三种方法可以实现此操作:
例如,我们有如下代码:
std::string str_value = "origin";
char c_append = 'c';
  1. 通常情况下,我们使用push_back()方法。
    str_value.push_back(c)
  2. 使用+=运算符。
    str_value += c
  3. 使用append()方法。
    str_value.append(1,c)
    你可以从http://www.cplusplus.com/reference/string/string/了解更多关于string的方法。

似乎并没有比@MooingDuck的回答更好。 - Sebastian

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

请注意,我写的是10u而不是10,它表示我要追加字符的次数;将10替换为任何数字。


0

补充答案,因为带有很多赞的 this answer 建议使用 push_back('c'),而另一个答案则建议不要。由于两个回答都有点旧了,让我们来更新一下。

使用GNU的STL库libstdc++,测试追加charstd::string的以下5种方法的性能:str.append(), str += 'c', str.resize(str.size() + 1, 'c'), str.push_back('c')str.insert(str.end(), 1, 'c')

t是所有操作中用时最短的时间,则结果如下:

参数 \ CPU 时间 (4dp) append() += resize() push_back() insert()
优化 = 无
编译器 = Clang 11.0
标准 = c++11
2.6255
1.1t
2.4826
t
3.3396
1.3t
2.4759
t
4.5967
2t
优化 = 无
编译器 = Clang 15.0
标准 = c++20
14.1841
1.5t
9.3077
t
15.7846
1.7t
9.7907
1.1t
27.1050
2t
优化 = O3
编译器 = Clang 11.0
标准 = c++11
19.1018
2t
9.9812
t
25.1597
2.5t
10.0466
t
17.5578
2t
优化 = O3
编译器 = Clang 15.0
标准 = c++20
9.9465
t
9.8468
t
9.9519
t
9.8686
t
9.9145
t

+= 运算符和 push_back() 函数始终是最快的方法,其次是 append() (1.1t - 2t)、resize()(1.3t - 2.5t)和 insert() (2t


-1
如果您正在使用push_back,那么就不需要调用string构造函数。否则,它将通过转换创建一个字符串对象,然后将此字符串中的字符添加到另一个字符串中。为了一个微小的字符而增加了太多麻烦 ;)

1
字符串的操作符+=(char c)被重载了。实际上,字符串构造函数不接受一个字符,详见Brian的回答 ;) - Khaled Alshaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接