C言語関係掲示板

過去ログ

No.984 英小文字のカウント

[戻る] [ホームページ]
No.12817

カウントについて
投稿者---stdio.h(2004/02/18 18:18:43)


英小文字だけカウントして英大文字をカウントしないように
するには、どういうプログラムになるんですか?
どなたか、教えてください。

No.12818

Re:カウントについて
投稿者---たか(2004/02/18 18:45:50)


>英小文字だけカウントして英大文字をカウントしないように
>するには、どういうプログラムになるんですか?
>どなたか、教えてください。

islower()を使用して大文字小文字を区別すればいいでしょう。但しこの
マクロまたは関数はisascii()を満たす文字にしか使えませんので注意。

No.12819

Re:カウントについて
投稿者---stdio.h(2004/02/18 18:54:42)


>>英小文字だけカウントして英大文字をカウントしないように
>>するには、どういうプログラムになるんですか?
>>どなたか、教えてください。
>
>islower()を使用して大文字小文字を区別すればいいでしょう。但しこの
>マクロまたは関数はisascii()を満たす文字にしか使えませんので注意。

それ以外に、何かありますか??

No.12822

Re:カウントについて
投稿者---たか(2004/02/18 20:13:31)


>>>英小文字だけカウントして英大文字をカウントしないように
>>>するには、どういうプログラムになるんですか?
>>>どなたか、教えてください。
>>
>>islower()を使用して大文字小文字を区別すればいいでしょう。但しこの
>>マクロまたは関数はisascii()を満たす文字にしか使えませんので注意。
>
>それ以外に、何かありますか??

自分でislower()関数を自作するしかないでしょうね。

No.12825

Re:カウントについて
投稿者---NykR(2004/02/18 20:59:50)


>それ以外に、何かありますか??
#include <stdio.h>
#include <ctype.h>

int count_lower(FILE *fp)
{
    int c;
    int count = 0;

    while ( (c = getc(fp)) != EOF ) {
        if      (iscntrl(c)) ;
        else if (isspace(c)) ;
        else if (ispunct(c)) ;
        else if (isdigit(c)) ;
        else if (isupper(c)) ;
        else                 count++;
    }
    return count;
}

他にもありますけど。isalphaとisupperを組み合わせるとか

No.12826

Re:カウントについて
投稿者---かずま(2004/02/18 22:07:34)


> それ以外に、何かありますか??

islower を使うことに何か問題があるんでしょうか?

遅くてもよいのなら、strchr を使うという手もあります。
#include <stdio.h>
#include <string.h>

int main(void)
{
    int c, count = 0;

    while ((c = getchar()) != EOF)
        if (strchr("abcdefghijklmnopqrstuvwxyz", c)) count++;
    printf("%d\n", count);
    return 0;
}


No.12820

Re:カウントについて
投稿者---YuO(2004/02/18 19:17:31)


>islower()を使用して大文字小文字を区別すればいいでしょう。但しこの
>マクロまたは関数はisascii()を満たす文字にしか使えませんので注意。

islowerは有効な単バイト文字全てについて利用可能です。
#つーか,isasciiって何?


No.12824

Re:カウントについて
投稿者---たか(2004/02/18 20:32:33)


>>islower()を使用して大文字小文字を区別すればいいでしょう。但しこの
>>マクロまたは関数はisascii()を満たす文字にしか使えませんので注意。
>
>islowerは有効な単バイト文字全てについて利用可能です。
>#つーか,isasciiって何?

POSIXまたはWin32上で利用可能な関数で、標準ではありません。
でも確かにislower()だけで判別できるようです。済みません。

#以前はisascii()を通した後でないとislower()、isupper()が使え
#なかったような記憶があります。今は違うようですね。

No.12845

Re:カウントについて
投稿者---stdio.h(2004/02/19 14:42:43)


>>>islower()を使用して大文字小文字を区別すればいいでしょう。但しこの
>>>マクロまたは関数はisascii()を満たす文字にしか使えませんので注意。
>>
>>islowerは有効な単バイト文字全てについて利用可能です。
>>#つーか,isasciiって何?
>
>POSIXまたはWin32上で利用可能な関数で、標準ではありません。
>でも確かにislower()だけで判別できるようです。済みません。
>
>#以前はisascii()を通した後でないとislower()、isupper()が使え
>#なかったような記憶があります。今は違うようですね。

ちなみに、キーボードから入力した英小文字だけをカウントを
しなさい。という課題なんですけどね。