文字列を初期化し、結果の文字配列を変更したいと考えています。私はした:文字列から文字配列を変更する
std::string str = "hello world";
const char* cstr = str.c_str();
// Modify contents of cstr
しかし、cstrはconstなので、私は要素を変更することはできません。 constを削除すると、c_str()
は使用できません。
これを達成する最も良い方法は何ですか?
文字列を初期化し、結果の文字配列を変更したいと考えています。私はした:文字列から文字配列を変更する
std::string str = "hello world";
const char* cstr = str.c_str();
// Modify contents of cstr
しかし、cstrはconstなので、私は要素を変更することはできません。 constを削除すると、c_str()
は使用できません。
これを達成する最も良い方法は何ですか?
str
をthe std::string
member functionsに変更するだけです。
これらの機能には、operator[]
が含まれます。
C++ 11(およびそれに準拠した実装)では、&str[0]
は必要なポインタです。
これを行うための最善かつ最も簡単な方法は、単に直接operator[]
独自のを使用してstd::string
を変更することです:
str[0] = 'G'; // "Gello world"
あなたは本当にC-文字列をコピーする必要がある場合は、何らかの理由で、あなた
char* buffer = new char[str.length() + 1];
strcpy(buffer, str.c_str());
delete[] buffer;
ここで明白な欠陥は動的割り当てです。 std::string
を直接変更するだけで、あなたの人生を楽にするために、そのクラスが書かれたものです。
@RemyLebeauありがとう。 –
文字列自体を変更できないのはなぜですか? –
*これを達成する最良の方法は何ですか?*単に 'std :: string'を直接変更してください。 – NathanOliver
これを 'const_cast'で行うことは可能ですが、文字列内の内部メンバーはバッファを変更していると仮定し、変更方法によって予期しない後で奇妙な行動。 (私が知っていることを私に尋ねないで、私はそれについてもう一度考えるつもりはない) – Donnie