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

ご指摘お願いします。


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

このQ&Aに関連する最新のQ&A

A 回答 (9件)

恐らく何かの課題なのだろうけど


単に文字数をカウントするのが目的の課題なら、islowerを使うのが早道でしょうし

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

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

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



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

No.4です。


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

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

幸いなことに、Cの標準関数にはislower()という、


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

「範囲指定」って何のことだろう.


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

センスないなあ。

いや冗談です。

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

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

countにカウントされます。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2009/05/20 15:37

>gets(str);



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

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

と言う風に、漠然と思考するのではなく一つ一つ物事を噛み砕いて考えましょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/20 15:40

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

    • good
    • 0

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

    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q1キーで大文字/小文字を切り替えたい

1キーで大文字/小文字を切り替えたい

現在Windows 7でMicrosoft IMEを使用しています。

ローマ字の大文字と小文字を切り替えるときにはShiftキーとCapslock/英数キーを同時に押すのが標準だと思います。

ただ仕事がら大文字/小文字の切り替えが非常に多く、2つのキーを押すのがひどく面倒に感じられ、この機能を1つのキーに割り当てられることができればどんなにいいだろうと思っています。

たとえばCapslock/英数キーを押すだけで大文字と小文字が切り替わると助かります。

そこで[Microsoft IMEのプロパティ]→[編集操作]→[キー設定]→[変更]を探るのですが、それらしき項目は見当たりません。

Microsoft IMEの設定でなんとかならないでしょうか?あるいは何らかのソフトウェアを導入して解決できないでしょうか?

よろしくお願いします。

Aベストアンサー

英語キーボードを使ってみてください。
英語キーボードですと、CapsLockはシフトを押さず
単独で動作してくれます。

質問者さんが「仮名入力」しかできないならば
英語キーボードはお薦めできませんが、
「ローマ字入力」をすることが可能ならば
英語キーボードの方が楽に打てるはずです。

英語キーボードは2000円くらいから販売されています。

Qchar *str; と char* str;

char *str; と char* str;
どっちも同じことを意味しているんですか?

Aベストアンサー

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染むのでしょう。ちなみにそういう風な人たちは

char *str1, *str2;

とは、書けない体になっています。

char* str1;
char* str2;


変数の宣言だと、C に慣れていれば、char* str というのはちょっと違和感があるのは
私も分かりますが、関数のプロトタイプ宣言だと、どちらの方がすっきりしますか?

extern char *memcpy(char *, const char *);

extern char* memcpy(char*, const char*);


# まあ、どっちが正しい、っていうんじゃ無いんですよね

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染む...続きを読む

Qアルファベットの小文字・大文字切り替えについて

言語バーの「直接入力」にて英字を入力する際に、いつもならシフトキーを押しながら入力することで(通常が小文字なら)大文字になるのですが、いくらシフトキーを押しながら入力しても全く変わらなく(小文字のままに)なってしまいました。

パスワード等は小文字大文字を区別するので困っています。言語バーの「半角入力」でF8やF9を押すことで対応はしていますが、どこに不具合があるか、どなたか教えていただけますでしょうか。

Aベストアンサー

原因と対応を探ってみました。

1. ソフトウェアの問題

1.1. 設定変更
 あまり考えられませんが、何かの設定により Shift キーを無効にしていませんか?
 先ほど、Delete キーを無効にしてしまったという質問を見ましたので、可能性があるかもしれません。

2. ハードウェアの問題

2.1. 物理的な故障
 Shift キーを押し込めない状態になっていませんか。
(1) キーの下に異物が入っているため(大量のゴミなど)キーが十分下がらない。
(2) 飲み物をこぼしたなどの原因で、キーの軸が周囲に張り付いて動かなくなっている。

2.2. 電気的な故障
 Shift キーの接点が、接触不良を起こしている。

原因としては、これらが考えられます。

対応は、以下の方法をお試し下さい。

1.1. 設定変更
 これが原因の場合は、設定を元に戻してください。

2.1. 物理的な故障
 掃除機でゴミを吸い取るか、エアダスターでゴミを吹き飛ばしてみてください。
 次には、キートップを外して(かなり力が要ります)内部が正常に動くか確認してみてください。
 キートップを外すときは、
 キートップリムーバーという道具がありますが入手は手間がかかるので、
 ドライバーの先端を使うか(下記のページの2番目の写真を参考に)、
 http://www.infovaio.net/pcv-s/key/
 針金を輪にしたものを作り、引っ掛けて抜きます。
 (私が先日キーボードを掃除したときのやり方です。下記のページの中段の写真を参考に)
 http://park16.wakwak.com/~ex4/kb/news0202.htm
 ゴミが残っている場合は、取り除いてください。

 ここで、軸がきちんと上下するかも確認してください。

 動かない場合は(2)の問題で、洗浄処理が必要です。

2.2. 電気的な故障
 これまでの対応が当てはまらない場合は、電気的な故障と考えられます。
 この場合は、キーボードの分解・修理が必要です。

自分で直せない場合は、(ノートの場合は)修理に出す、
(デスクトップの場合は)買い替えることを検討してください。
また、Shift キーは普通は左右に一つずつあるので、片方が使えるなら多少の不便は我慢して、使い続けることもありかもしれません。

原因と対応を探ってみました。

1. ソフトウェアの問題

1.1. 設定変更
 あまり考えられませんが、何かの設定により Shift キーを無効にしていませんか?
 先ほど、Delete キーを無効にしてしまったという質問を見ましたので、可能性があるかもしれません。

2. ハードウェアの問題

2.1. 物理的な故障
 Shift キーを押し込めない状態になっていませんか。
(1) キーの下に異物が入っているため(大量のゴミなど)キーが十分下がらない。
(2) 飲み物をこぼしたなどの原因で、キーの軸が周囲に張り...続きを読む

Qint i,j; \n i=0,j=5;

int i,j;
i=0;
j=5:
と書いてあるソースは普通ですが、
int i,j;
i=0,j=5:
と書いてあるソースもあります。
後者はC++の正しい書式ですか?

カンマ演算子というのは後者のカンマのことですか?

Aベストアンサー

 正しい書式です。

i=0,j=5;
 における、「,」をカンマ演算子といいます。2項の演算子です。カンマで区切られた演算を「左から順番に」実行し、最後の演算を結果として返します。
 したがって、例の文であれば、i=0を実行し、次にj=5を実行。そして、j=5の結果の5を結果として返します。
 ・・・
 が、本来的には、あまり、例のような使い方はしませんね。よく見られるのは、次のような場合です。

 for (i=0,j=0 ; i < 50 ; ++i,++j) {

 のような形でよく見られます。for文の各式は、一つの式でなければならないので、こんな書き方をするわけです。初期化と更新部が一つにまとまり、ループが読みやすくなるのが利点かな。

Q「G」の小文字入力の切り替え

あるふべっとの「G」には「g」と「ɡ」の二つ有りますが、これらをキーボードから入力する時の切り替え方法を教えて下さい。

Aベストアンサー

「ɡ」というのは、数字の9に似た形の、よく手書きで書かれる「g」のことですよね。

これは、フォントに依存しているのでキーボードでどうこうできるっていうのはないと思いますよ。

参考URL:http://ohkadesign.cool.ne.jp/wabunfont/ohbun2/Sansserif/Sansserif.html

QC言語のプログラムで#includeを使わず#includeだけで

C言語のプログラムで#include<math.h>を使わず#include<stdio.h>だけで√(sqrt)を表現することは可能でしょうか?

Aベストアンサー

ご自分で sqrt 関数を作れば可能です。
こんな感じでしょうか。

#include <stdio.h>

static double
sqrt (double s)
{
 double x = s / 2.0;
 double last_x = 0.0;

 while (x != last_x)
 {
  last_x = x;
  x = (x + s / x) / 2.0;
 }

 return (x);
}

int
main (int argc, char * argv[])
{
 printf ("sqrt (%f) = %f\n", 3.0, sqrt (3.0));
}

Q大文字と小文字が混ざったパスワードの入力の仕方

大文字と小文字が混ざったパスワードの入力の仕方

大文字と小文字が混ざったパスワードを入力する場合。
「SHIFT」+「CAPS LOCK」ボタンを押して切り替えていますが、
●●●表示しか出ず、入力した文字が大文字か小文字の確認出来ず、
困っています。何か良い裏技が有れば教えて下さい。

使用OS:VISTA HP SP-2
使用ブラウザ:IE-8

Aベストアンサー

>「SHIFT」+「CAPS LOCK」ボタンを押して切り替えていますが、
普通の使い方は小文字モードで入力し、大文字のときだけShuftを押しながら英文字を押します。
大文字が大幅に多い場合はシフトロック(Shuft+Caps)して操作を逆転します。
IEでのパスワード入力では他のエリアへタイプしてそれをカット&ペーストする方法も有効です。
右クリックでペースト出来ない場合でもCtrl+vでペーストできると思います。

Qprintf("\a");のアラーム音

言語:c

#include <stdio.h>

int main ( void ) {
printf("\a");
return (0);
}

上記のプログラムを実行すると、
アラーム音(?)が鳴ります。

音が出ている場所がスピーカからではなくて、
PCの本体から出ているようです。

なぜスピーカから鳴らないのでしょうか。
なぜPC本体から鳴っているのでしょうか。

Aベストアンサー

環境にもよるのですが…Windowsですか?一般的なPCの場合、
スピーカからなる宇和揺る普通のサウンドの他に、BEEP音源というのがありまして。
こちらはデバイスが違うのでPC本体から直接音が鳴ります。
# 現在では、例えばシステムの異常を通知するような時くらいしか使われないかも。
で、\aにこちらが使われるのは、多分にMS-DOS時代からの歴史的な経緯じゃないかと思います。
昔はコレでも普通でしたし、
\aは「何か音がなればいい」というものであって、どんな音を鳴らすかは別に決まってないですし、
めったに使われないので綺麗なサウンドとか必要ないと思いますし、
OSがおかしくてもなる可能性がBEEPの方が高いかもしれませんし…。

Q大文字と小文字入力の方法を教えてください

大文字と小文字入力の方法を教えてください

ローマ字入力で、ネット上のあるサイトへパスワードを大文字小文字を混ぜて入力したいのですが、入力し始めると●がいくつかつきます。言語バーは半角英数状態であとは反応がないです。
どうしたら大文字と小文字入力の切り替えと入力ができますか?

Aベストアンサー

Caps Lock キーの状態を確認しましょう。
ランプが点灯していると大文字を入力する状態になっています。ランプが消灯していれば小文字入力状態です。

これは大文字と小文字の入力を切り替えるキーです。キーボードの一番左の縦一列の中にあります。
ほとんどのキーボードには Caps Lock が on になると該当するランプが点灯するようになっています。
スタンダードなキーボードでは、キーボード上の右上に「Number Lock」「Caps Lock」「Scroll Lock」の順でランプが並んでいますから
これらのランプの状態を確認しましょう。

さて多くのキーボードでは、Caps Lock キーを押しただけでは大文字と小文字の切替はできません。
Shift キーを押しながら Caps Lock キーを押すとこの切替ができることが多いようです。

また、Shift キーを押しながら 英数字を入力すると、大文字と小文字を一時的に切り替える事ができます。


メモ帳などで動作の確認と入力の練習をしてみてください。

Qvoid (*signal(int signum, void (*handler)(int)))(int);

の解釈を教えてください
最後の「(int)」については詳しくお願いします

Aベストアンサー

signalが

(1)1つ目の引数の型:int
(2)2つ目の引数の型:引数がintで戻り値がvoidである関数へのポインタ
(3)戻り値の型:引数がintで戻り値がvoidである関数へのポインタ(2と同じ)

を満たす関数である事を宣言しています。最後の(int)はsignalの戻り値の
関数ポインタがint型の引数を持つ事を示しています。

「引数がintで戻り値がvoidである関数へのポインタ」の型をHANDLERと表すと

HANDLER signal(int signum, HANDLER handler);

となります。


人気Q&Aランキング