• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列とポインタを使って特定の文字だけ大文字にする)

特定の文字だけ大文字にするプログラムを作る方法

このQ&Aのポイント
  • 配列とポインタを使って特定の文字だけ大文字にするプログラムを作りたいです。
  • 具体的には、文字列"sports"の中の"s"だけを大文字に変換したいです。
  • 以下のプログラムを作りましたが、正しく動作しません。

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

  • ベストアンサー
  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.3

if文では、正しく配列の内容を参照出来ているので、たいへん惜しいですね。 if(*(a+i)=='s'  ⇒ 正しい参照の仕方 a-32;     ⇒ 意味不明 やりたいことは、直前の if 文で判定した配列の内容を書き換えたいのですから、少なくとも左辺は、 *(a+i) にならなければならないです。 更に、新たに書き込む数値は、元の内容から32を引いた(小文字から大文字への変換)なので、右辺は、 *(a+i) - 32 です。 なので、正解は、 *(a+i) = *(a+i) - 32 (これは、C言語の演算子の特徴で省略して、 *(a+i) -= 32 と記述することも出来ます。) まずは、これで試してみてください。 ちなみに、元の通り a-32 とすると、演算結果をどこにも代入していないので何も起こりません。 また、仮に これが a -= 32 であったとすると、配列の内容ではなく、ポインターが 32 戻されることになります。これは実際には確保していない領域になるので、*a を参照すれば不定値ですし、*a に値を書き込むとなんらかのデータの領域をオーバーライトしてしまう危険な操作となってしまいます。

その他の回答 (2)

回答No.2

幾らかは本のサンプルコードを参考にしたか、学校で課題ででたコードを穴埋めしたのかわかりませんが。 ここまで来ておいて、惜しいですね。 a-32; では書き換えた文字の番号はどこにも保存されていませんね。

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

>if(*(a+i)=='s'){ >a-32; >} は何をしているのかよく考えましょう。

関連するQ&A