- 締切済み
皆様に、C言語についての質問です・・><
皆様に、C言語についての質問です・・>< プログラミングの内容は以下のようなものです。 標準関数のstrシリーズは使用不可です 以下の実行結果をもとにプログラミングしなさい。 char m[30]; 実行結果 文字,個数==>A,5 文字,個数==>b,3 文字,個数==>c,1 文字,個数==>E,2 文字,個数==>^Z 文字列:AAAAABBBcEE Ctrl+Zが押されるまでやるらしいですが・・・ どうか教えてください>< できれば皆様の例をみてみたいです・・・
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yama5140
- ベストアンサー率54% (136/250)
>Ctrl+Zが押されるまでやるらしいですが・・・ 「何を」やるらしいか仕様が示されていませんが、「実行結果」等からプログラムには、 ・入力を促す表示をする ・英文字1つとカンマと個数を取り込む ・配列に個数分の『小文字なら大文字化した(せずそのまま)』文字を格納する ・Ctrl+Zが押されるまで、配列がいっぱいになるまで、上を繰り返す ・Ctrl+Zが押されたら、配列がいっぱいになったら、配列を表示し終了する といった機能が必要なことが判ります。 ★重要と思われる『小文字なら大文字化した(せずそのまま)』は、 ・b は、大文字化 ・c は、そのまま ・他の小文字は、・・??? なお、小文字 b c についても、常にその処理なのか、例えば「偶数回目に入力されたら『大文字化』」とかが・・全く不明です。 まず、「仕様」を解決すべきです。 不明な点が1つでもあると、「正しく」プログラミングできません。 「取り込んだ文字が英小文字のとき、すでに配列に格納した文字総数が奇数の場合のみ、大文字に変更する」などの条件も考えられます。 この推定仕様を付けた「らしい」プログラムを下に示します(文字配列の大きさが8の倍数なのは趣味の世界です。他意はありません)。 参照 http://www.bohyoh.com/CandCPP/C/Library/gets.html http://www.bohyoh.com/CandCPP/C/Library/atoi.html >標準関数のstrシリーズは使用不可です う~ん、奇妙な条件ですね。 #include <stdio.h> #include <stdlib.h> #define BRK (-1) const char cgEimoji[ 64 ] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int Hantei( char c1 ) { int i; for( i = 0; i < 52; i++ ){ if( c1 == cgEimoji[ i ] ) return( i ); } return( -1 ); } void main() { char m[ 30 ], cIn[ 8 ]; int nn = 0, iMojiNo, iKosu, i; while( nn < ( 30 - 1 ) ){ printf( "文字,個数==>" ); cIn[ 0 ] = BRK; // 初期化 gets( cIn ); if( BRK == cIn[ 0 ] ) break; if( ',' != cIn[ 1 ] ) break; iMojiNo = Hantei( cIn[ 0 ] ); if( -1 == iMojiNo ) break; iKosu = atoi( &cIn[ 2 ] ); // 個数文字列の数値化 if( ( iMojiNo < 26 ) && ( nn % 2 ) ) iMojiNo += 26; // 推定仕様 for( i = 0; i < iKosu; i++ ){ m[ nn++ ] = cgEimoji[ iMojiNo ]; // 配列格納 if( ( 30 - 1 ) <= nn ) break; } } m[ nn ] = '\0'; // 文字列終端処理 printf( "文字列:%s\n", m ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
- Tacosan
- ベストアンサー率23% (3656/15482)
#include <stdio.h> #include <stdlib.h> int main() { char m[30] = "AAAAABBBcEE"; char ch; int rep; while (printf("文字,個数==>"), fflush(stdout), scanf("%c,%d", &ch, &rep) == 2); printf(m); return EXIT_SUCCESS; } とか.
- DESTROY11
- ベストアンサー率23% (806/3494)
1.m[]と「カウンタ」初期化 2.「文字」と「数」を入力 3. CTRL-Z押下されるまで4-8繰り返す 4. 「数」分ループ 5. m[カウンタ]=文字 6. カウンタ+1 7. 4へ戻る 8. 2へもどる 9.m[]表示
- asuncion
- ベストアンサー率33% (2127/6289)
>できれば皆様の例をみてみたい よさそうなのを見つけて、そのまま自分がやった宿題の答えか何かとして 提出しよう、という腹づもりではないですね?
補足
そういうわけではないです><