- ベストアンサー
C++で文字を置換する関数を作成する方法
- C++で文字を置換する関数を作成する方法について教えてください。
- 現在じゃんけんさせるプログラムを作成しているのですが、文字を置換する関数を作りたいです。
- 作成した関数を使用して、じゃんけんの結果を表示するプログラムも作りたいです。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
C言語の関数の戻りとして文字列を返す場合、安全を考えるなら 文字列リテラルをそのまま返す形式 char* 朝の挨拶() { return "んちゃ!"; } 文字列バッファを引数で受けて編集する形式 char* 夜の挨拶(char* buff) { return sprintf(buff, "%sちゃ!", "バイ"); } のどちらかを使います。 グローバル変数とか静的変数を使う方式もありますが、 これは不可解なバグを引き起こしやすいのでお勧めできません。 というわけで今回のケースならば、 文字列リテラル(のポインタ)を返す形式が適してるかと思います。 char* Replacement(int ver){ char* Replaced; if (ver == 2) Replaced = "パー"; else if (ver == 1) Replaced = "ちょき"; else Replaced = "ぐー"; return Replaced; }
その他の回答 (7)
- wormhole
- ベストアンサー率28% (1626/5665)
>なぜそれではダメなのか、よくわからないです。 #4,#7の方が説明されていますから、それらをよく読んで考えてみてください。
お礼
やっとなんとか分かったと思います・・・多分。 これからも頑張ります。
- honor
- ベストアンサー率35% (25/71)
関数の戻り値型をconst char*にして それぞれのifブロック内で文字列をそのままreturnする、とか。
- Tacosan
- ベストアンサー率23% (3656/15482)
そもそも Replaced がいらんのか.
- KAZUMI2003
- ベストアンサー率37% (77/208)
C#はちょっと置いといて、これがCなら、 { char*Replaced = "ぐう"; } この場合、中括弧を抜けた時にchar*のReplacedは、消滅します。 意識しない人が多いですが、中括弧は新たなスコープを引き起こします。 だからそこで宣言char *Replacedが有効なのです。(C99ではどこでもOKらしいですが) これ動くようにするには、各中括弧の中のchar*Replaced = "*" の部分をstrcpy(Replaced,"*")にして、 char Replaced[20]={0};の前にstaticを付けるべきでしょう。 あ、もちろん関数の戻り値もchar*にする必要があります。
お礼
スコープ・・・、勉強になりました。 ついでにいうと私のポインタの理解もあやふやですね・・・。 c#といいますと、c++の話をしていたと思うのですが、なぜ出てきたのでしょうか?
- wormhole
- ベストアンサー率28% (1626/5665)
関数の戻り値の型と実際に返してる型が異なるので合わせる必要があります。 ただし char *Replacement(int ver){ とするだけではダメです。
補足
なぜそれではダメなのか、よくわからないです。 どうやって調べればいいのでしょうか?
- akayoroshi
- ベストアンサー率50% (46/91)
関数定義の1行目、戻り値の型を変えて char* Replacement(int ver){ にする。
- maiko0318
- ベストアンサー率21% (1483/6969)
int Replacement(int ver){ ↑ 最初にintと指定しているのに、returnがchar *Replacedで、 型が違うって言っているのです。
お礼
ありがとうございます。それで成功しました。 {}もいけなかったんだな・・・。 No.3さんの回答が理解できていないため、この質問をクローズするのはもう少し後に致します。