• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C アルファベットのカウント)

アルファベットのカウント結果

このQ&Aのポイント
  • アルファベットのカウント結果を取得するコードを実装しました。
  • 使用されたアルファベットごとのカウント結果を出力しました。
  • カウント結果は以下の通りです: a: 28 c: 56 e: 84 g: 112 i: 140 k: 168 m: 196 o: 224 q: 252 s: 280 u: 308 w: 336 y: 364 {: 392

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

  • ベストアンサー
回答No.1

まともに読んでないけど > for(h=N-1;h<=M;h++){ > > h++; forの宣言部でh++して、for文の中でもh++してるから、 2ずつカウントアップしていくけど良いの? a→c→e→gってチェックしちゃう > char str[ ]="national university"; これ、19個の配列作ってて、20個目がnullとは限らないけど? その結果 > for(i=0;str[i] != '\0';i++){ このループが文字数を超えていて、28回ループしてるね。 > if(str[i] = check){ ==(比較)ではなく =(代入)になってるから 代入した上で、代入した値が0以外だったらtrueって意味になっちゃってるよ? なので、28回(iのループ回数)count++してる。 countをクリアしていないから、累積されてっちゃうよ? なので、 28: 28 56: 28+28 84: 28+28+28

msnaruo
質問者

補足

ありがとうございます!したかったことはできるようになりました。 しかし、ご指摘のループがよくわかりません。 19個の配列作ってて、20個目がnullとは限らない→28回ループ というのが・・?

その他の回答 (4)

回答No.5

count初期化してないのが原因でしたか、失礼。 \0ついたと思ったけど、28回もループしてるみたいだから、 余計な勘繰りしました。 って、あれ?じゃぁ2週目のチェックで+28されてるんだろう?

回答No.4

> > char str[ ]="national university"; > これ、19個の配列作ってて、20個目がnullとは限らないけど? についてだけ。 CやC++では、"" で囲んだ文字列リテラルには、暗黙のうちに、'\0' が付加されます。 また、もともと、 char str[ ] = "national university" は、char 配列を文字列リテラルで初期化するための、シンタックスシュガーで、 意味するところは、 char str[] = {'n', 'a', 't', 'i', 'o', 'n', 'a', 'l', ' ', 'u', 'n', 'i', 'v', 'e', 'r', 's', 'i', 't', 'y', '\0} (最後の '\0' は暗黙に付加されたもの) になります。 なので、str[19] は、'\0' になります。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>> char str[ ]="national university"; >これ、19個の配列作ってて、20個目がnullとは限らないけど? sizeof(str)は20になるハズですが……。 とりあえず、 countが未初期化だったり、1段目のループでクリアしていないから累積されている…のは確かです。 で… >if(str[i] = check){ の箇所でstr[]を破壊しているのも確かです。 すべてのループが終わった後で printf("%s",str) とでもすれば、ステキに書き換え終わった内容が確認できるでしょう。 >したかったことはできるようになりました。 指摘部分修正して、正常動作するようになった…ということですかね? それでも… >#define N 97 >#define M 122 というマジックナンバー使うのはどうかと思いますが。 for(h=N-1;h<=M;h++){ なぜ-1が??

関連するQ&A