Инициируйте и используйте C ++ std :: string в качестве массива char

Я хочу использовать std :: string для динамической обработки строк. Данные добавляются и добавляются в строку, иногда я не хочу устанавливать значение для символа с индексом i. Я не знаю, сколько символов будет добавлено в строку. Что-то вроде динамического сбора в .NET.
Когда я выделяю std :: string в C ++

std::string s;

и попробуйте установить элемент с индексом i для него:

s[0] = 'a';

Это будет из-за ошибки, связанной с памятью.
Глупый способ — инициализировать его существующими данными и заменить их позже:

std::string s = generate1000chars();
s[2] = 'c';

Есть ли способ инициировать строку, которая позволяет манипулировать символом с индексом i, как массив символов?

0

Решение

Может быть, вы можете попробовать функцию обертки, как

std::string& SetChar(std::string& str, char ch, size_t index)
{
if (str.length() <= index)
{
str.resize(index + 1);
}
str[index] = ch;
return str;
}

Так что строка может автоматически расширяться при необходимости.
(Модифицировано для лучшей подписи)

1

Другие решения

Ты можешь использовать std::string::resize() изменить его размер и заполнить позже:

std::string s;
s.resize(1000);

//later..
s[2] = 'c';
4

По вопросам рекламы [email protected]