• 締切済み

皆様に、C言語についての質問です・・><

皆様に、C言語についての質問です・・>< プログラミングの内容は以下のようなものです。 標準関数のstrシリーズは使用不可です 以下の実行結果をもとにプログラミングしなさい。 char m[30]; 実行結果 文字,個数==>A,5 文字,個数==>b,3 文字,個数==>c,1 文字,個数==>E,2 文字,個数==>^Z 文字列:AAAAABBBcEE Ctrl+Zが押されるまでやるらしいですが・・・ どうか教えてください>< できれば皆様の例をみてみたいです・・・

みんなの回答

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

>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)
回答No.3

#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)
回答No.2

1.m[]と「カウンタ」初期化 2.「文字」と「数」を入力 3. CTRL-Z押下されるまで4-8繰り返す 4. 「数」分ループ 5.   m[カウンタ]=文字 6.   カウンタ+1 7.   4へ戻る 8. 2へもどる 9.m[]表示

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>できれば皆様の例をみてみたい よさそうなのを見つけて、そのまま自分がやった宿題の答えか何かとして 提出しよう、という腹づもりではないですね?

rokokonine
質問者

補足

そういうわけではないです><

関連するQ&A

専門家に質問してみよう