- ベストアンサー
文字列の問題
入力された文字列(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);
- みんなの回答 (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 ); } 注:インデントに全角空白を用いています。タブに一括変換して下さい。
その他の回答 (2)
- ryopis
- ベストアンサー率20% (49/238)
for(もしくはwhile)を使って配列chの各要素(ch[0],ch[1],...)を 調べていくことになりますが、そのあたりの構文はわかりますか? ちなみにこのループを抜ける条件はNULL文字です(以下参照)。 20文字の文字列を受け付けたい場合は char ch[21]; などと(最低)21文字分の配列を用意しておきましょう。 #C言語ではNULL文字という文字で文字列が終わります。
お礼
アドバイスありがとうございました。なんとかできました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「大文字かどうか」「小文字かどうか」などの判定はできますか? 大文字かどうかなどの部分を除いて 1文字目は C です 2文字目は h です などと表示することはできますか?
お礼
作成できました、ありがとうございました。
補足
「大文字かどうか」「小文字かどうか」などの判定はよく分かりません。 ↓で 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); } } }
お礼
丁寧な回答ありがとうございました。参考になりました。おかげさまで作成できました。