• ベストアンサー

文字列の問題

入力された文字列(char型配列に格納)について、1文字ずつその文字の種類を表示し、最後に文字数を表示するプログラムを作成せよ。文字の種類は、大文字、小文字、数字、その他の文字の4種類とすること。 という問題なのですが、実行例は↓になっています。 % ./mojiretsu 文字列(20文字まで)? Char-1 ←文字列を入力 1文字目は C で、 大文字です。 2文字目は h で、 小文字です。 3文字目は a で、 小文字です。 4文字目は r で、 小文字です。 5文字目は - で、 その他の文字です。 6文字目は 1 で、 数字です。 以上6文字です。 % ですが↓から先をどう書いたら良いのかわかりません。どなたか教えてください。 #include<stdio.h> main() { char ch[20]; printf("文字列(20文字まで)? "); scanf("%s", ch);

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

>「大文字かどうか」「小文字かどうか」などの判定はよく分かりません。  http://www.bohyoh.com/CandCPP/C/Library/index.html    ここの I の部分は全て、「文字種テスト関数」のようです(未確認)。   >for(i=0;ch[i] != '0';i++){   '0' は、数字の 0 で16進の 0x30。文字列終端は、0x00 です。     http://e-words.jp/p/r-ascii.html >for(j=1;j<=20;j++){  前の for 文と合体した意味合い?でないと・・・。 ------------------------ ☆ else の嫌いな年寄りの一例です(BorlandC++5.6.4)。 #include <stdio.h> #include <ctype.h> // 文字種テスト関数ヘッダファイル char cgMojisyu[4][16] = { "数", "大文", "小文", "その他の文" }; void main() {  char ch[32];  int iCode, nn = 0;  printf( "文字列(20文字まで)? " );  scanf( "%s", ch );  while( ch[ nn ] && ( nn < 20 ) ){ // 終端でなく、かつ、< 20   iCode = 3; // 一旦、「その他の文字」   if( isdigit( ch[ nn ] ) ) iCode = 0;   if( isupper( ch[ nn ] ) ) iCode = 1;   if( islower( ch[ nn ] ) ) iCode = 2;   printf( "%2d文字目は %c で、%s字です。\n", ( nn + 1 ), ch[ nn ], cgMojisyu[ iCode ] );   nn++; // 次の文字へ  }  printf( "以上 %d 文字です。\n", nn ); } 注:インデントに全角空白を用いています。タブに一括変換して下さい。

nadonado
質問者

お礼

丁寧な回答ありがとうございました。参考になりました。おかげさまで作成できました。

その他の回答 (2)

  • ryopis
  • ベストアンサー率20% (49/238)
回答No.2

for(もしくはwhile)を使って配列chの各要素(ch[0],ch[1],...)を 調べていくことになりますが、そのあたりの構文はわかりますか? ちなみにこのループを抜ける条件はNULL文字です(以下参照)。 20文字の文字列を受け付けたい場合は char ch[21]; などと(最低)21文字分の配列を用意しておきましょう。 #C言語ではNULL文字という文字で文字列が終わります。

nadonado
質問者

お礼

アドバイスありがとうございました。なんとかできました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「大文字かどうか」「小文字かどうか」などの判定はできますか? 大文字かどうかなどの部分を除いて 1文字目は C です 2文字目は h です などと表示することはできますか?

nadonado
質問者

お礼

作成できました、ありがとうございました。

nadonado
質問者

補足

「大文字かどうか」「小文字かどうか」などの判定はよく分かりません。 ↓で 1文字目は C です。 2文字目は h です。 などと表示することはこれでよいのでしょうか? #include<stdio.h> main() { char ch[21]; int i; printf("文字列(20文字まで)? "); scanf("%s", ch); for(i=0;ch[i] != '0';i++){ for(j=1;j<=20;j++){ printf("%d文字目は %c です。", j,ch); } } }