C ++:将char插入字符串

时间:2010-07-11 13:58:18

标签: c++ string insert stringstream

所以我试图将从字符串中获取的字符插入另一个字符串。 我在这里采取行动:  我想用简单的方法:

someString.insert(somePosition, myChar);

2。我收到一个错误,因为insert需要(在我的情况下)char *或string
3.我通过stringstream将char转换为char *:

stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);

4。一切似乎都在成功编译,但程序崩溃了

conversion >> myCharInsert;

线。

5.我正在尝试用字符串替换char *:

stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);

一切似乎都没问题,但当someAnotherString.at(someOtherPosition)成为空格时,程序崩溃。

那么我该怎么做呢?

3 个答案:

答案 0 :(得分:34)

std::string::insert有许多重载。插入单个字符的重载实际上有三个参数:

string& insert(size_type pos, size_type n, char c);

第二个参数n是将c插入位置pos的字符串中的次数(即重复该字符的次数。如果只有想要插入一个角色实例,只需将其传递一个,例如

someString.insert(somePosition, 1, myChar);

答案 1 :(得分:2)

最简单的方法是为自己提供一个将字符转换为字符串的功能。有很多方法可以做到这一点,例如

string ToStr( char c ) {
   return string( 1, c );
}

然后你可以简单地说:

someString.insert(somePosition, ToStr(myChar) );

并在其他需要字符串但有char的情况下使用该函数。

答案 2 :(得分:0)

  
      
  1. 一切似乎都在成功编译,但程序崩溃了
  2.   
conversion >> myCharInsert;

问题是你试图取消引用(访问)myCharInsert(声明为char*),它指向内存中的随机位置(可能不在用户的地址空间内)这样做是Undefined Behavior(在大多数实现中崩溃)。

修改

要将char插入字符串,请使用string& insert ( size_t pos1, size_t n, char c ); overload

<强>附加

char转换为std::string阅读this回复