みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

小文字のみを数える方法

小文字のみを表示させるプログラミングがいくらやってもできません。範囲指定をどこですれば良いのかわからず、全部の文字数をカウントしてしまいます。

ご指摘お願いします。


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

投稿日時 - 2009-05-20 14:47:09

QNo.4974863

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.9

恐らく何かの課題なのだろうけど
単に文字数をカウントするのが目的の課題なら、islowerを使うのが早道でしょうし

文字コードという点に着目する課題であるなら、
if (('a' <= str[i]) && (str[i] <= 'z'))
という判定をする方が趣旨に添っているでしょうね。

課題であれば必ずその前段で課題の元になるであろうテーマが解説されているはずだから
質問者がそのテーマ解説を理解していないので、方針が定まらないのでしょうね。

投稿日時 - 2009-05-20 16:57:15

ANo.8

ちなみにアドバイスですけど、

「C 小文字 判定」でぐぐれば、すぐにislowerというのがヒットします。自分で調べる癖をつけておいたほうがよいですよ。
それと、ビルドエラーについてですが、解決できないなら、そのビルドエラーを貼り付けてみてください。

投稿日時 - 2009-05-20 16:29:21

ANo.7

No.4です。
えっと、プログラムを初めて作ってるレベルなのかな。
int a;の次の行に入れてもだめでしょう。
gets(str)で読み込んでいるんですよね?
したがって、gets(str)の次です。

コンパイルエラーについてですが、おそらく私が書いたのが間違っているかもしれません。これ、JavaならOKという例です。Cの記述になおしてください。
あと、No.6さんが教えてくださっているとおり、islowerというのを使うとよりきれいになります。

投稿日時 - 2009-05-20 16:20:41

ANo.6

幸いなことに、Cの標準関数にはislower()という、
「引数で指定した文字が英小文字かどうかを判定する」関数(もしくはマクロ)が
備わっています。
入力した文字列全体を1文字ずつ読んではislowerで判定させればよいです。

投稿日時 - 2009-05-20 15:46:37

ANo.5

「範囲指定」って何のことだろう.
それぞれの文字に対し「その文字が小文字だったら 1を加える」って書くだけなんだけどね. ある文字が小文字かどうかを判定する方法はわかってますか? 分からないと, 全くお話になりませんよ.
ってか, こんなのわざわざ gets 使うまでもなく getchar でいいじゃん.
指摘は以上.
構文も違うけど, それ以上に「小文字かどうか」をそんなふうに判定してはいけない>#4.

投稿日時 - 2009-05-20 15:42:14

ANo.4

センスないなあ。いや冗談です。

Cの構文忘れたので間違っていたらごめんなさい。

int count = 0;
for (int i = 0; i < str.length; i++) {
if (('a' <= str[i]) && (str[i] <= 'z')) {
count++;
}
}

countにカウントされます。

投稿日時 - 2009-05-20 15:23:07

お礼

回答ありがとうございます。
今のを、int a;のところから入れても、ビルドの時にエラーが出てきてしまいます。
どこに入れたらいいのでしょうか?

申し訳ありませんが、よろしくお願いします。

投稿日時 - 2009-05-20 15:37:48

ANo.3

>gets(str);

この関数で、文字列として取得しますよね?
この文字列内には、大文字も小文字も混じっているのでしょう?
ヒョッとしたら、数字や記号も?

なので、文字列を1文字ずつに分解(というか切り出し)して
その一個の文字がどういったモノなのか?(大文字?小文字?数字?その他?)判断し
条件に一致するモノだけを、加算するなり、印字するなり・・・・

と言う風に、漠然と思考するのではなく一つ一つ物事を噛み砕いて考えましょう。

投稿日時 - 2009-05-20 15:04:00

お礼

他の方法でやってみても、エラーが出てしまうので
漠然とした考えになってしまいました。
どこで、判断をすればいいのでしょうか?

投稿日時 - 2009-05-20 15:40:52

ANo.2

変数 a の用途は何ですか?

投稿日時 - 2009-05-20 15:01:15

ANo.1

小文字のみをカウントする関数を作らないとダメなのでは?

投稿日時 - 2009-05-20 14:58:12

あなたにオススメの質問