С++: вставить 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
- Все, кажется, компилируется успешно, но программа выдает сообщение о получении
conversion >> myCharInsert;
Проблема заключается в том, что вы пытаетесь разыменовать (доступ) myCharInsert
(объявлен как char*
), который указывает на случайное местоположение в памяти (которое может не находиться внутри пользовательского адресного пространства), и это Undefined Поведение (сбой в большинстве реализаций).
ИЗМЕНИТЬ
Чтобы вставить char
в строку, используйте string& insert ( size_t pos1, size_t n, char c );
перегрузка.
Extra
Чтобы преобразовать char
в std::string
, прочитайте этот ответ