• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++(というよりC)で文字を置換)

C++で文字を置換する関数を作成する方法

このQ&Aのポイント
  • C++で文字を置換する関数を作成する方法について教えてください。
  • 現在じゃんけんさせるプログラムを作成しているのですが、文字を置換する関数を作りたいです。
  • 作成した関数を使用して、じゃんけんの結果を表示するプログラムも作りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.7

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; }

yumewiki
質問者

お礼

ありがとうございます。それで成功しました。 {}もいけなかったんだな・・・。 No.3さんの回答が理解できていないため、この質問をクローズするのはもう少し後に致します。

その他の回答 (7)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.8

>なぜそれではダメなのか、よくわからないです。 #4,#7の方が説明されていますから、それらをよく読んで考えてみてください。

yumewiki
質問者

お礼

やっとなんとか分かったと思います・・・多分。 これからも頑張ります。

  • honor
  • ベストアンサー率35% (25/71)
回答No.6

関数の戻り値型をconst char*にして それぞれのifブロック内で文字列をそのままreturnする、とか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

そもそも Replaced がいらんのか.

回答No.4

C#はちょっと置いといて、これがCなら、 { char*Replaced = "ぐう"; } この場合、中括弧を抜けた時にchar*のReplacedは、消滅します。 意識しない人が多いですが、中括弧は新たなスコープを引き起こします。 だからそこで宣言char *Replacedが有効なのです。(C99ではどこでもOKらしいですが) これ動くようにするには、各中括弧の中のchar*Replaced = "*" の部分をstrcpy(Replaced,"*")にして、 char Replaced[20]={0};の前にstaticを付けるべきでしょう。 あ、もちろん関数の戻り値もchar*にする必要があります。

yumewiki
質問者

お礼

スコープ・・・、勉強になりました。 ついでにいうと私のポインタの理解もあやふやですね・・・。 c#といいますと、c++の話をしていたと思うのですが、なぜ出てきたのでしょうか?

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

関数の戻り値の型と実際に返してる型が異なるので合わせる必要があります。 ただし char *Replacement(int ver){ とするだけではダメです。

yumewiki
質問者

補足

なぜそれではダメなのか、よくわからないです。 どうやって調べればいいのでしょうか?

回答No.2

関数定義の1行目、戻り値の型を変えて char* Replacement(int ver){ にする。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

int Replacement(int ver){ ↑ 最初にintと指定しているのに、returnがchar *Replacedで、 型が違うって言っているのです。

関連するQ&A