2016-11-28 2 views
0

動的な文字列処理のためにstd :: stringを使いたい。データは追加されて文字列に追加されますが、インデックスiの文字の値を設定することはできません。文字列にいくつの文字が追加されるのか分かりません。 .NETの動的コレクションのようなもの。 私はCでのstd ::文字列++C++のstd :: stringをcharの配列として初期化して使用する

std::string s; 

を割り当て、それをインデックスiの要素を設定しようとすると:メモリに関連するエラーによる

s[0] = 'a'; 

それがします。 愚かな方法をして、それを初期化されたデータを存在し、後でそれを置き換える:

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

は、私はchar型の配列のように、インデックスで文字を操作できるように文字列を初期化する方法はありますか?

+1

使用する前に、文字列を[サイズ変更する](http://www.cplusplus.com/reference/string/string/resize/)する必要があります。 – Sergey

+1

また、いくつかの文字を追加したい場合は、 'push_back'と' operator + = 'を見てください。 – Sergey

+1

私は、[ここ](http://en.cppreference.com/w/cpp/string/basic_string/basic_string)の2番目のコンストラクタである 'std :: string s(1000、 'a');'を意味しました。もちろん、サイズを変更するよりも遅くする必要があります。 – 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'; 
関連する問題