C++: вставьте символ в строку

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

someString.insert(somePosition, myChar);

2. Я получил ошибку, потому что вставляют, требует (в моем случае) символа* или строка
3. Я преобразовываю символ для обугливания* через 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. Я пытаюсь заменить символ* строкой:

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

Все, кажется, в порядке, но когда someAnotherString.at(someOtherPosition) становится пространством, катастрофическими отказами программы.

Таким образом, как я правильно делаю это?

21
задан 11 July 2010 в 13:58
поделиться

3 ответа

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

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

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

someString.insert(somePosition, 1, myChar);
36
ответ дан 29 November 2019 в 20:47
поделиться
  1. Все вроде бы успешно компилируется, но программа падает, когда доходит до
conversion >> myCharInsert;

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

EDIT

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

Дополнительно

Для преобразования char в std::string прочитайте this answer

0
ответ дан 29 November 2019 в 20:47
поделиться

Самое простое - предоставить себе функцию, которая превращает символ в строку. Есть много способов сделать это, например

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

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

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

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

2
ответ дан 29 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: