2016-11-28 13 views
0

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

std::string s; 

и попытаться установить элемент с индексом я для него:

s[0] = 'a'; 

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

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

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

+1

Вы должны [изменить размер] (http://www.cplusplus.com/reference/string/string/resize/) строки перед использованием. – Sergey

+1

Также обратите внимание на 'push_back' и' operator + = ', если вы хотите добавить некоторые символы. – Sergey

+1

Я имел в виду 'std :: string s (1000, 'a');', второй конструктор из [здесь] (http://en.cppreference.com/w/cpp/string/basic_string/basic_string). Конечно, он должен быть медленнее, чем просто изменять размер. – Sergey

ответ

1

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

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

Так что строка может автоматически продлить, если это необходимо. (Изменено на лучшую подпись)

+0

У нас даже есть хорошо приготовленное решение здесь. Спасибо – Andiana

4

Вы можете использовать std::string::resize(), чтобы изменить его размер и заполнить его позже:

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

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