- 締切済み
小文字のみを数える方法
小文字のみを表示させるプログラミングがいくらやってもできません。範囲指定をどこですれば良いのかわからず、全部の文字数をカウントしてしまいます。 ご指摘お願いします。 #include <stdio.h> #include <string.h> int main(void) { char str[256]; int a; printf("大文字と小文字をランダムに入力\n"); gets(str); printf("小文字の数は%dです\n",strlen(str),a); return(0); }
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- trajaa
- ベストアンサー率22% (2662/11921)
恐らく何かの課題なのだろうけど 単に文字数をカウントするのが目的の課題なら、islowerを使うのが早道でしょうし 文字コードという点に着目する課題であるなら、 if (('a' <= str[i]) && (str[i] <= 'z')) という判定をする方が趣旨に添っているでしょうね。 課題であれば必ずその前段で課題の元になるであろうテーマが解説されているはずだから 質問者がそのテーマ解説を理解していないので、方針が定まらないのでしょうね。
- kotoby2003
- ベストアンサー率15% (280/1755)
ちなみにアドバイスですけど、 「C 小文字 判定」でぐぐれば、すぐにislowerというのがヒットします。自分で調べる癖をつけておいたほうがよいですよ。 それと、ビルドエラーについてですが、解決できないなら、そのビルドエラーを貼り付けてみてください。
- kotoby2003
- ベストアンサー率15% (280/1755)
No.4です。 えっと、プログラムを初めて作ってるレベルなのかな。 int a;の次の行に入れてもだめでしょう。 gets(str)で読み込んでいるんですよね? したがって、gets(str)の次です。 コンパイルエラーについてですが、おそらく私が書いたのが間違っているかもしれません。これ、JavaならOKという例です。Cの記述になおしてください。 あと、No.6さんが教えてくださっているとおり、islowerというのを使うとよりきれいになります。
- asuncion
- ベストアンサー率33% (2127/6289)
幸いなことに、Cの標準関数にはislower()という、 「引数で指定した文字が英小文字かどうかを判定する」関数(もしくはマクロ)が 備わっています。 入力した文字列全体を1文字ずつ読んではislowerで判定させればよいです。
- Tacosan
- ベストアンサー率23% (3656/15482)
「範囲指定」って何のことだろう. それぞれの文字に対し「その文字が小文字だったら 1を加える」って書くだけなんだけどね. ある文字が小文字かどうかを判定する方法はわかってますか? 分からないと, 全くお話になりませんよ. ってか, こんなのわざわざ gets 使うまでもなく getchar でいいじゃん. 指摘は以上. 構文も違うけど, それ以上に「小文字かどうか」をそんなふうに判定してはいけない>#4.
- kotoby2003
- ベストアンサー率15% (280/1755)
センスないなあ。いや冗談です。 Cの構文忘れたので間違っていたらごめんなさい。 int count = 0; for (int i = 0; i < str.length; i++) { if (('a' <= str[i]) && (str[i] <= 'z')) { count++; } } countにカウントされます。
- trajaa
- ベストアンサー率22% (2662/11921)
>gets(str); この関数で、文字列として取得しますよね? この文字列内には、大文字も小文字も混じっているのでしょう? ヒョッとしたら、数字や記号も? なので、文字列を1文字ずつに分解(というか切り出し)して その一個の文字がどういったモノなのか?(大文字?小文字?数字?その他?)判断し 条件に一致するモノだけを、加算するなり、印字するなり・・・・ と言う風に、漠然と思考するのではなく一つ一つ物事を噛み砕いて考えましょう。
お礼
他の方法でやってみても、エラーが出てしまうので 漠然とした考えになってしまいました。 どこで、判断をすればいいのでしょうか?
- asuncion
- ベストアンサー率33% (2127/6289)
変数 a の用途は何ですか?
- precog
- ベストアンサー率22% (966/4314)
小文字のみをカウントする関数を作らないとダメなのでは?
お礼
回答ありがとうございます。 今のを、int a;のところから入れても、ビルドの時にエラーが出てきてしまいます。 どこに入れたらいいのでしょうか? 申し訳ありませんが、よろしくお願いします。