2016-11-28 68 views
0

我想使用std :: string進行動態字符串處理。數據被追加並附加到一個字符串,有時我不想在索引i處設置字符的值。我不知道有多少字符會被添加到字符串中。像.NET中的動態集合。 當我在分配C++爲std :: string初始化並使用C++ std :: string作爲char數組

std::string s; 

,並嘗試在索引i爲它設置元件:

s[0] = 'a'; 

它將通過與存儲器錯誤。 一個笨方法是初始化它存在的數據,後來換成:

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

有沒有一種方法來初始化字符串,允許索引操作字符我,像一個字符數組?

+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'; 
相關問題