С++: вставить char в строку

поэтому я пытаюсь вставить символ, который я получил из строки, в другую строку. Вот мои действия:  1. Я хочу использовать просто:

someString.insert(somePosition, myChar);

2. Я получил ошибку, потому что вставка требует (в моем случае) char * или строки
3. Я преобразовываю char в char * через stringstream:

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) становится пробелом, программа вылетает.

Итак, как я правильно это сделал?

Ответы

Ответ 1

Существует несколько перегрузок std::string::insert. Перегрузка для вставки одного символа фактически имеет три параметра:

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

Второй параметр n - количество раз, чтобы вставить c в строку в позиции pos (т.е. количество раз, чтобы повторить символ. Если вы хотите вставить только один экземпляр символ, просто передайте его, например,

someString.insert(somePosition, 1, myChar);

Ответ 2

Проще всего обеспечить себя функцией, которая превращает символ в строку. Существует множество способов сделать это, например

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

Тогда вы можете просто сказать:

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

и использовать эту функцию в других случаях, когда вы хотите использовать строку, но char.

Ответ 3

  1. Все, кажется, компилируется успешно, но программа выдает сообщение о получении
conversion >> myCharInsert;

Проблема заключается в том, что вы пытаетесь разыменовать (доступ) myCharInsert (объявлен как char*), который указывает на случайное местоположение в памяти (которое может не находиться внутри пользовательского адресного пространства), и это Undefined Поведение (сбой в большинстве реализаций).

ИЗМЕНИТЬ

Чтобы вставить char в строку, используйте string& insert ( size_t pos1, size_t n, char c ); перегрузка.

Extra

Чтобы преобразовать char в std::string, прочитайте этот ответ