таким образом, я пытаюсь вставить символ, который я получил от строки к другой строке. Здесь я мои действия: 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)
становится пространством, катастрофическими отказами программы.
Таким образом, как я правильно делаю это?
Существует ряд перегрузок std :: string :: insert
. Перегрузка для вставки одного символа фактически имеет три параметра:
string& insert(size_type pos, size_type n, char c);
Второй параметр, n
, - это количество раз, которое нужно вставить c
в строку в позиции pos.
(т. Е. Количество раз повторения символа. Если вы хотите вставить только один экземпляр символа, просто передайте ему один, например,
someString.insert(somePosition, 1, myChar);
- Все вроде бы успешно компилируется, но программа падает, когда доходит до
conversion >> myCharInsert;
Проблема в том, что вы пытаетесь разыменовать (получить доступ) myCharInsert
(объявленный как char*
), который указывает на случайное место в памяти (которое может не находиться в адресном пространстве пользователя), и это является неопределенным поведением (падение на большинстве реализаций).
EDIT
Для вставки char
в строку используйте string& insert ( size_t pos1, size_t n, char c );
перегрузка.
Дополнительно
Для преобразования char
в std::string
прочитайте this answer
Самое простое - предоставить себе функцию, которая превращает символ в строку. Есть много способов сделать это, например
string ToStr( char c ) {
return string( 1, c );
}
Тогда вы можете просто сказать:
someString.insert(somePosition, ToStr(myChar) );
и использовать функцию в других случаях, когда вам нужна строка, но есть символ.