web-dev-qa-db-ja.com

C ++:文字列に文字を挿入する

文字列から取得した文字を別の文字列に挿入しようとしています。ここで私は私の行動:1.私はシンプルに使いたい:

_someString.insert(somePosition, myChar);
_

2.挿入に(私の場合)char *またはstringが必要なため、エラーが発生しました
3。文字列ストリームを介して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)がスペースになると、プログラムがクラッシュします。

では、これを正しく行うにはどうすればよいですか?

23
user380041

std::string::insert のオーバーロードは多数あります。単一の文字を挿入するためのオーバーロードには、実際には3つのパラメーターがあります。

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

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

someString.insert(somePosition, 1, myChar);
40
James McNellis

最も簡単なのは、文字を文字列に変換する関数を提供することです。これを行う方法はたくさんあります。

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

次に、単に言うことができます:

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

そして、文字列が必要であるがcharがある他の場合には、関数を使用します。

2
anon
  1. すべてが正常にコンパイルされているようですが、プログラムが取得をクラッシュさせます
_conversion >> myCharInsert;
_

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

[〜#〜]編集[〜#〜]

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

追加

charを_std::string_に変換するにはread this 答え

0
Prasoon Saurav