• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:教えていただけませんか?C言語 文字列について)

C言語 文字列について

このQ&Aのポイント
  • C言語で文字列を扱う際のプログラム作成方法について教えてください。
  • 文字列の中のピリオドで改行し、出力するプログラムの作り方を教えてください。
  • ピリオドの後のスペースと意図しない改行を避ける方法を教えてください。

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

  • ベストアンサー
  • knb-nkm
  • ベストアンサー率66% (4/6)
回答No.3

先ず、改行についてですが、fgets で文字列を取得すると、 入力するときの改行も含めて読み込まれます。 標準入力からの読込であれば、gets を使っても良いのでは? "abc. cde" をstrtok で切り分けた場合、 "abc." と、" cde" に切り分けられるので、 2番目以降の出力の際には、スペース一文字分を考慮する 必要がありますね。 printf("%s.\n", a+1); でいいんじゃないかな?

pmimudnai
質問者

お礼

回答ありがとうございます そのようにしてみるとうまくいきました 解説もとてもわかりやすくてありがたかったです 本当にありがとうございました

すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

解決したいことは、 1. 「.」直後の空白を削除したい(区切り後先頭に来る空白) 2. 最後の出力で出力される余計な改行を削除したい 基本的なコーディングは間違えていないという感じなので ヒントだけ。 「1.」 は どうしてもstrtok()つかいたい場合は、aのアドレスを移動させてみるとかどうでしょう。 # 個人的には strtok_r()の方がおすすめです。 「2.」は stdinで読み込んだ段階でキー入力時の改行が追加されています。 はじめてstrtok()する前にA[ strlen(A)-1 ] = '\0'; みたいな感じで 最後の \r\nを削除してあげればいいんじゃないですかね。 質問の内容を読み間違えていたらわすれてください(笑

pmimudnai
質問者

お礼

回答ありがとうございます 直したいところを的確に答えていただいてとてもわかりやすかったです strtok_r()など色々勉強になりました 本当にありがとうございました 3番のかたのほうが回答がはやかったためそちらをベストアンサーにさせていただきます すいません

すると、全ての回答が全文表示されます。
  • zuntac
  • ベストアンサー率36% (45/124)
回答No.4

このsiteでは「プログラムを丸ごと教えてください。」というのがよくありますが、 その点あなたは自分のプログラムを書いて、それについて悩んでいるのは立派だと 思います。 プログラムが意図通りに動かない場合に、その原因を突き止めて修正する作業を 「デバッグ」と言います。プログラムを作るには、「設計」、「コーディング」、 「テスト」、「デバッグ」などの行程が必要になりますが、このデバッグにかかる 時間は設計よりも長くなったりもします。また、しっかりしたテストを行って その結果からデバッグを効率的に行うことがプログラム作成には必要です。 今、あなたはテストを行ってバグ(問題点)を見つけたので、あとはデバッグを 行う技術を身につければ良いのです。 例えばプリント文を printf("[%s].\n",a); としてみてください。strtok で切り出された文字列が[ ] に挟まれて表示されるので、これを見て自分が 予想していた結果と同じかどうかを検討すればデバッグはできるハズです。 頑張ってください。

pmimudnai
質問者

お礼

回答ありがとうございます まだプログラミングを始めたばかりなのであなたの回答は とても参考になりました これからも頑張ろうと思います 本当にありがとうございました できれば3番の方とあなたをベストアンサーにしたのですが 3番の方の回答のほうが早く、この質問にはあっていると思ったので 3番の方をベストアンサーとさせていただきます すいません

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

strtokなんていう、微妙なふるまいをする関数を使わなくても、 1文字読む .(ピリオド)でなければ、そのまま出力する ピリオドならば、改行を出力して1文字読み飛ばす でじゅうぶんかと。

pmimudnai
質問者

お礼

迅速に答えていただきありがとうございます そうですね strokを使ったほうが簡単そうだったので使ってみたのですが 失敗だったのかもしれません そのやり方でも考えてみることにします 回答ありがとうございました

すると、全ての回答が全文表示されます。
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

ぱっと見、ピリオドではなく、スペースで区切ると思うので、 >a = strtok(A, "."); じゃなくて、 a = strtok(A, " "); ではないですか?

pmimudnai
質問者

お礼

すぐに回答していただきありがとうございます そのようにしてみたのですがうまくいきませんでした 回答ありがとうございました

すると、全ての回答が全文表示されます。

関連するQ&A