ページ 11

学校の課題が分かりません。

Posted: 2012年9月28日(金) 11:34
by Virus
 自分は今、東京の工学系の大学に通っているのですが、C言語の課題で分からないものが出て・・・。
 文字列の入力後、、英字の出現回数をカウントし、最後にその出現回数を表示、且つ、数字の前の部分に出現個数分の、アスタリスクを表示 しなさい。ただし、英字は全て大文字(A~Z)としみなす。
という問題なのですが、
ctype.hを使う、
while((c = getchar())!= EOF){
if(islower(c)){
c = toupper(c);

printf("%c",alphabet);

という文がmainの中にできる、というところまでは分かったのですが・・・。
どなたか分かる方がいましたら、御回答御願い致します。

Re: 学校の課題が分かりません。

Posted: 2012年9月28日(金) 11:52
by バグ
えっと、まずは、そのプログラムが何をしているのかを説明していただけますか?

Re: 学校の課題が分かりません。

Posted: 2012年9月28日(金) 11:56
by Virus
すみません。それを忘れていました。
表示結果は、
例として、TOKYOと入力したら、
A 0
B 0
C 0
...
K * 1
L 0
M 0
N 0
O ** 2
...
S 0
T * 1
といった感じで、アルファベットの入力回数をそれぞれ、AからZまで表示する、というものなのですが。

Re: 学校の課題が分かりません。

Posted: 2012年9月28日(金) 12:11
by non
Virus さんが書きました:  while((c = getchar())!= EOF){
if(islower(c)){
c = toupper(c);

printf("%c",alphabet);
じゃ、ここまでの部分を、動くようにプログラムしてみてください。

Re: 学校の課題が分かりません。

Posted: 2012年9月28日(金) 15:22
by 初級者
ヒマなので作ってみました。
ちゃんと動くかどうかは保証できません。

コード:

#include <stdio.h>
#include <ctype.h>

#define ALPHABET (26)

void inputData(int *p)
{
    int c;

    printf("英文字を入力するんだぜぇ!\n");
    while ((c = getchar()) != EOF) {
        if (islower(c)) {
            p[toupper(c) - 'A']++;
        }
    }
}

void outputData(int *p)
{
    int i, j;

    for (i = 0; i < ALPHABET; i++) {
        printf("%c ", 'A' + i);
        for (j = 0; j < p[i]; j++) {
            putchar('*');
        }
        printf(" %d\n", p[i]);
    }
}

int main(void)
{
    int count[ALPHABET] = { 0 };

    inputData(count);
    outputData(count);
    return 0;
}