• ベストアンサー

C言語です。よろしくお願いします

何をすればいいのかがさっぱりです 文字列を入力 入力された文字列について 次の(1)~(6)のすべてを表示するプログラムを作成 (1) 全文字の合計文字数 (2) 数字の文字数 (3) 英大文字の文字数 (4) 英小文字の文字数 (5) 空白の文字数 (6) その他の文字の文字数 データの読み込みはgetchar 関数を使用 実行例 total = (1) numeric= (2) large = (3) small = (4) space = (5) other = (1)-(2)(3)(4)(5) よろしくお願いします

noname#128756
noname#128756

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

今週もあとわずか。この問いも2ページへ回されましたから、もういいでしょう。 UNIX系として、リダイレクトで取り込んで処理することが条件です。 データの入力文字列は、Japan Times の記事を testfile とすれば http://search.japantimes.co.jp/cgi-bin/nn20101118a4.html ↓のように出力されます。 なお、プログラム内容は見てのとおりチョー簡単です。それは講義をきちんと受けていればわかる問題ですから、くれぐれも さ・ぼ・ら・ぬ よう肝に命じてください。 起動は「./a.out<testfile」です。 ----- testfile ----- Japan, U.S. to launch talks to bolster defense WASHINGTON (Kyodo) Tokyo and Washington will soon launch working-level talks on strengthening defense cooperation in the event of an emergency affecting Japan, sources involved in Japan-U.S. relations said Tuesday. The two countries decided to substantially strengthen the alliance in the face of the diplomatic clash with China over the Sept. 7 incident near the Senkaku Islands in the East China Sea and China's recent escalation of activities in the South China Sea, the sources said. The plan is to renew and enhance the 1997 defense cooperation guidelines. ----- Result ----- Items: total= 612 numeric= 5 large= 34 small= 459 space= 91 other= 23 /* Gcc on Mac OSX */ #include <stdio.h> #include <ctype.h> int main(void) { int c,total,numeric,large,small,space,other; total=numeric=large=small=space=other=0; while ((c=getchar())!=EOF) { putchar(c); total++; if(isdigit(c)) numeric++; else if(isupper(c)) large++; else if(islower(c)) small++; else if(c==' ') space++; else other++; } printf("\nItems:\n"); printf("\ttotal= %d\n",total); printf("\tnumeric= %d\n",numeric); printf("\tlarge= %d\n",large); printf("\tsmall= %d\n",small); printf("\tspace= %d\n", space); printf("\tother= %d\n", other); return 0; }

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec07.html
noname#128756
質問者

お礼

懇切丁寧に有難う御座いました

その他の回答 (3)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

>よろしくお願いします >>何をすればいいのか >次の(1)~(6)のすべてを表示するプログラムを作成 >(1) 全文字の合計文字数 >(2) 数字の文字数 >(3) 英大文字の文字数 >(4) 英小文字の文字数 >(5) 空白の文字数 >(6) その他の文字の文字数 何を質問されているのかわかりません。 もう少し質問を明確にしてください。 >何をすれば。。。 上記を表示するプログラムを 作ればいいのではないですか?

noname#128756
質問者

お礼

分かりにくくてごめんなさい

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

int total=0; while(getchar()!=EOF) { total++; } printf("total=%d\n",total);

noname#128756
質問者

お礼

ありがとです

  • yomyom01
  • ベストアンサー率12% (197/1596)
回答No.1

(1) 全文字の合計文字数 strlen()で (2) 数字の文字数 isdigit()で (3) 英大文字の文字数 isupper()で (4) 英小文字の文字数 islower()で (5) 空白の文字数 スペース=0x20を使う

noname#128756
質問者

お礼

ありがとうございました。

関連するQ&A

  • C言語プログラミング

    [問題] 一行文字列を読み込み、その中の英小文字列をすべて英大文字に出力するプログラムを作りなさい。 という問題です。どなたか分かる方ご指導お願いします!

  • C言語の質問です

    キーボードから文字列を何度も入力し、入力文字数が0文字になるまで入力を繰り返し合計の文字数を表示するプログラムでなのですが。 ???の部分がわかりません 教えて頂けませんか? #include <stdio.h> #include <string.h> //関数のプロトタイプ宣言 int input(); int main(void) { int n; //入力文字数 int total; //合計文字数 for(total = 0 ; (n =??? ) != 0; total +=n ); printf("%d文字\n" , total); } int input() { char buff[80]; printf("文字列を入力:"); gets(buff); return ??? ; }

  • C言語 例題01

    例題にもかかわらず全く分かりません。 どうか教えてください。 これから課題を解くのに、困っています。 入力をEOFまで文字を読込、英小文字、英大文字、数字、空白文字、全文字数を出力するprogramを下記を必ず用いて完成させよう。 * ctype.h をinlcudeし,文字の判定には以下の関数を使おう。 関数 説明 int islower(int c) 文字cが小文字かどうかを調べる int isupper(int c) 文字cが大文字かどうかを調べる int isdigit(int c) 文字cが数字('0'~'9')かどうかを調べる       int isspace(int c) 文字cが空白文字(' ', '\n', '\t'など)か どうかを調べる

  • 計算機言語(C言語)の課題です。

    ポインタstrが文字列の先頭文字を指している時、その文字列に含まれる英小文字を英大文字に変換する関数 void str_toupper(char *str) を作成しなさい。ただし、英小文字a~zおよび英大文字A~Zには、それぞれ昇順に、連続した1バイトの整数が割り当てられているものとする。例えば、aには10進数の97、zには10進数の122が割り当てられ、Aには10進数の65、Zには10進数の90が割り当てられるといった具合である。

  • C言語

    以下のC言語のプログラムを教えてください。 お願いします。 (1)標準入力から文字列(2 文字以上)を入力し,文字数を計上すると共に,入力された文字列の逆順に入れ替える処理を実現してください.なお,以下の要件を満たしたプログラムを作成してください. ・ 入力された文字列は,char 型の配列(要素数50)で受け取ること ・ 文字数を計上するcount 関数(引数:配列のアドレス,戻り値:文字数)を定義 し,main 関数より呼び出すこと ・ 文字列を逆順に入れ替えるreverse 関数(引数:配列のアドレス,戻り値:無し) を定義し,main 関数より呼び出すこと ・ 標準出力の処理は,main 関数で記述すること 【プロトタイプ宣言】 int count(char *str); void reverse(char *str); 【実行結果】 文字列を入力してください(2 文字以上) apple 文字数 = 5 入れ換え前 apple 入れ換え後 elppa (2)char 型の配列(要素数50)を2 つ宣言し,標準入力から2 つの文字列を入力してください.そして,格納した字列を入れ替える関数(swapstr 関数)を作成し,入れ替え前と入れ替え後の配列内の値(文字列)を配列名とともに標準出力するプログラムを作成してください. 【プロトタイプ宣言】 void swapstr(char *str1, char *str2); 【実行結果】 2 つの文字列を入力してください apple strawberry 入れ換え前 配列str1 = apple 配列str2 = strawberry 入れ換え後 配列str1 = strawberry 配列str2 = apple

  • C言語

    (a) キーボードから入力された文字列をそのままディスプレイに表示するプログラムを作成しなさい。 という問題 #include<stdio.h> main() { char word[1000]; /*文字型の変数の宣言*/ scanf("%s", word); /*キーボードから文字列を入力*/ printf("%s\n", word); /*入力した文字列を出力*/ } と作りましたがこれではコンソール中で文字を打ってからエンターを押さないといけないからといわれ再提出になってしまいました。 エンターを押さないでそのまま出力するということは、できるのでしょうか? あと自分の作ったプログラムではスペースや改行を使うことができないから使えるようにしろと言われてましたがそれわできますか? 変換仕様をかえればいいのですか ほかにもかえる所はありますか?

  • C言語

    文字列を逆順にするプログラムを考えているのですが分かりません。(例)qwerならrewqです。入力終了は、EOFです。考えたのですが、分かりません。(コンパイルエラーです。)教えてください。宜しくお願いします。#include <stdio.h> unsigned str_length(const char str[]) { unsigned len=0; while (str[len]) len++; return (len); } void put_rstring(const char str[]) { unsigned i = str_length(str): while (i-- >0) putchar(str[i]); } int main(void) { char str[30]; int ch; printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示               で反対から、文字列が表示----*/ while (1) { ch=getchar(); if (ch==EOF) break; } printf("逆から表示"); put_rstring(str); puts("です。"); return(0); }

  • C言語の式を教えて頂きたいのですが

    「Yahoo」と入力すると、 1.「oohaY」と、逆から表示 2.文字数=5と表示 3.「YAHOO」と大文字で表示 というプログラムは、それぞれどのように書いたらいいでしょう? char moji[9]; は使うそうですが、int、for、if、putchar、getchar、printf、scanfなど、まだ基礎の基礎を習っている段階の初心者なので、できるだけ簡単にお願いします。

  • C言語でパスワード作成ツール

    C言語で以下のプログラムを作らなくてはなりません。 どなたかご教授くださるようお願いいたします。 1 入力された値を階乗するプログラム <表示>   値を入力してください。   答え:XXXXX 2 パスワード作成ツール <使用方法>   ./mypasswd [user ID][パスワード文字数] <機能>   下記の条件にあった任意の文字列を標準出力に返す。 条件1 引数[user ID]は必須 条件2 指定できる出力文字列は6,7,8文字のいずれかとする(省略可、デフォルト8文字) 条件3 出力もじる津を構成する文字列範囲はa~z、A~Z、0~9とする。 条件4 ユーザーアカウントに含まれる文字列を含まない。 条件5 英大文字を最低1文字含む。 条件6 英小文字を最低1文字含む。 条件7 数字を1文字含む。 <設計>   下記の関数を組み合わせる。 関数1 引数チェック関数(条件1、2) 関数2 ヘルプを表示する関数(条件1、2、の説明文を表示する) 関数3 時刻を種にした乱数を用いて、任意の1文字を返す関数 関数4 ある1文字が使用可能文字列に含まれるものかどうかを判断する関数(条件3) 関数5 ある1文字が、userIDに含まれるものかどうかを判断する関数(条件4) 関数6 関数3~5を利用して、パスワ-ドに使用することが出来る文字列を返す関数 関数7 関数6を利用し、条件5~7が考慮された文字列を返す関数 3 入力された計算式を計算するプログラムを作成 <機能>   +-*/(括弧は使用しない)の組合せで小数も扱う。   敷の最大長は100文字までとする。 <表示>   計算式を入力してください。   答え:XXXXXXXXXX

  • c言語プログラミングHELP!

    c言語でプログラムを組んでるんですが、どうしてもわからないものがありまして、 まず一つ目がキーボードから英小文字を一つ入力し、その文字を大文字に変換して出力するプログラミングです。結果がまずひとつの英小文字を入力して、入力した文字と、大文字に変換した文字を出力するプログラミングです。 ちなみにヒントは'a'=97,'A'=65です 二つ目が二桁の16進数('41'から'49','50'から'59')を入力すると対応する文字を表示するプログラミングです。また、%xは使用しないこと。なお、入力に間違いはないものとする。(ヒントは入力は一つの数値か、二つの文字か?だそうです。) 結果は二桁の16進数('41'から'49','50'から'59')を入力して、文字コードの二桁の数字と文字を出力するプログラミングです。 お願いします。

専門家に質問してみよう