29

そのため、文字列から取得した文字を別の文字列に挿入しようとしています。ここに私のアクションがあります: 1.シンプルに使いたい:

someString.insert(somePosition, myChar);

2. 挿入には (私の場合) char* または string が必要なため、エラーが発生しました
3. stringstream を介して char を char* に変換しています。

stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);

4. すべてが正常にコンパイルされているように見えますが、取得時にプログラムがクラッシュします。

conversion >> myCharInsert;

ライン。

5. char* を文字列に置き換えようとしています:

stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);

すべて問題ないように見えますが、someAnotherString.at(someOtherPosition)スペースになるとプログラムがクラッシュします。

では、どうすればこれを正しく行うことができますか?

4

4 に答える 4

52

のオーバーロードがいくつかありstd::string::insertます。1 つの文字を挿入するためのオーバーロードには、実際には次の 3 つのパラメーターがあります。

string& insert(size_type pos, size_type n, char c);

2 番目のパラメータ は、文字列の位置nに挿入する回数 (つまり、文字を繰り返す回数) です。文字のインスタンスを 1 つだけ挿入したい場合は、単純に 1 つを渡します。cpos

someString.insert(somePosition, 1, myChar);
于 2010-07-11T14:00:52.187 に答える
3

最も簡単なのは、文字を文字列に変換する関数を用意することです。など、これを行うには多くの方法があります。

string ToStr( char c ) {
   return string( 1, c );
}

次に、次のように簡単に言うことができます。

someString.insert(somePosition, ToStr(myChar) );

また、文字列が必要であるが文字がある場合は、この関数を使用します。

于 2010-07-11T14:02:19.813 に答える
1
  1. すべてが正常にコンパイルされているように見えますが、プログラムが get でクラッシュします
conversion >> myCharInsert;

問題は、メモリ内のランダムな場所 (ユーザーのアドレス空間内にない可能性があります) を指している逆参照 (アクセス) myCharInsert(として宣言) を試みていることです。これは未定義の動作です (ほとんどの実装でクラッシュします)。char*

編集

chara を文字列に挿入するには、string& insert ( size_t pos1, size_t n, char c ); オーバーロードを使用します。

追加

この回答を読むことに変換するcharにはstd::string

于 2010-07-11T14:02:18.420 に答える