• 締切済み

皆様に、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% (786/3386)
回答No.2

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

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

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

rokokonine
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

    皆様に、C言語についての質問です・・>< この前も質問しましが、まだできないので>< 後、少し問題にもミスがあったので書き直しました プログラミングの内容は以下のようなものです。 以下の実行結果をもとにプログラミングしなさい。 char m[30]; 実行結果 文字,個数==>A,5 文字,個数==>b,3 文字,個数==>c,1 文字,個数==>E,2 文字,個数==>^Z 文字列:AAAAAbbbcEE ↓は自分でやったプログラムです>< #include<stdio.h> void main(void) { char m[30],moji; int kosu,i; printf("文字,個数==>"); fflush(stdin); scanf("%c,%d",&moji,&kosu); i=0; while(m[i]!=EOF) { printf("文字,個数==>"); scanf("%c,%d\n",&moji,&kosu); m[i]=moji; i++; } m[i]='\0'; printf("文字列:%s\n",m); return; } ^z押しても終了できません>< 表示もおかしいです・・・・ 訂正お願いいたします><

  • 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言語の質問です><

    C言語の質問です>< 次のような実行結果が得られるプログラミングをしたいのですが・・ ちなみにポインタや標準関数のstrシリーズは使用不可です。 文字列1:ABCDEFGHIJ 開始位置:0 文字数:3 文字列2:ABC 開始位置が7で文字数が5とかの場合は'¥0'の位置まで表示するようにしたいのですが、自分の以下のプログラムだと開始位置が0で文字が3だとABCと表示できるのですが、開始位置が7で文字数が5とかだとできません>< #include<stdio.h> void main(void) { char m1[]="ABCDEFGHIL"; char m2[11]; int i,j,start,mozikazu; printf("文字列1:%s\n",m1); printf("開始位置:"); scanf("%d",&start); if(start >=0 && start <11) { printf("文字数:"); scanf("%d",&mozikazu); } if((start+mozikazu)<11) { for(i=0;i<mozikazu;i++) { m2[i]=m1[i]+start; } m2[i]='\0'; } printf("文字列2:%s\n",m2); return; } どうか教えてください><

  • C言語のmemcpy関数について質問します。

    C言語のmemcpy関数について質問します。 以下のプログラムを作成して実行したのですが期待した動作が行えません。 どなたか原因が分かる方がいましたらアドバイスいただければと思います。 (期待する動作) STR_Bに"aaaa"を格納したい (現在の動作) STR_Bに"aaaabbbb"が格納される。 (printfで"aaaabbbb"が表示される) (以下プログラムです) char *STR_A = "aaaabbbb"; char *STR_B; /* 初期化 */ memset(&STR_B,0x00,sizeof(STR_B)); /* 文字列コピー */ memcpy(&STR_B,&STR_A,4); /* コピーした文字の表示 */ printf("STR_B = %s\n",STR_B);

  • プログラミングの問題です。c言語でお願いします。

    プログラミングの質問です。 c言語でお願いします。 以下の結果が得られるようなプログラムを書いてください。 期末試験では必ずフローチャートを書いてください。また、フローチャートが 書けない場合は、どういう順番でプログラムを書けば よいかを書いてください。 100個のデータを入力させ、プログラム実行者が定めるある値以上のものの個数 を表示する。 プログラミングわからないのでお願いします。

  • C言語:小文字を大文字に変換する関数を作成

    C言語超初心者です。学校の課題で次のような問題が出されました。 ・問題・ 次に挙げる縛りに沿い、以下の関数とメイン関数を作り、処理結果を画面に作成しなさい。 char *tst(char *str) ・strの中の文字列も小文字を大文字に変換し、変換した文字列が格納されているchar *に返す。 ・引数strの中の文字列は受け取った状態で手を加えない。 ・関数内でmalloc関数を使用し、領域を確保して大文字に変換した文字列を格納しreturnでポインタを返す。 ・malloc関数を使用する。 ---------------------------------------------------------------------------------- 大文字に変換するには while(*str != '\0') { if(*str >= 'a' && *str <= 'z') { *str -= 'a'- 'A'; } ++str; } というのは分かったのですがここから何をすするか全く分かりません。初心者なのでなるべく分かりやすく教えてもらえると有難いです。 お願いします。

  • C言語の問題があと少しでわからないのですが

    学校の課題に取り組んで分からないことろが出てきました。問題は以下のものです。 問題13 任意の文字列を(str)を入力して、削除文字を入力させ、strから削除文字を削除して表示しなさい。 出力例:str = abcd 削除文字:c →結果:abd というものです。 途中まで自分で考え ------------------------------------------------------------------------------------------------------------------- #include <stdio.h> void rmv(char *str, char c); int main(void) { char str[80]; int c; printf("文字列入力 : "); fgets(str, 80, stdin); printf("削除文字入力 : "); c = getchar(); void rmv(str, (char)c); printf("削除後文字列 : %s", str); return 0; } void rmv(char *str, char c) { while(*str) { if(*str == c) { while(*str) { *str = *(str + 1); ++str; } } ++str; } *str = '\0'; } --------------------------------------------------------------------------------------------------------- としましたが削除文字判定と文字つめのループ用に同じポインタを使っているので文字が一文字しか消えないと言われました。 解決方法にrmv関数内で別のポインタを用意し、if文内でコピー(例 p =str;)し次のwhile文内でこのポインタを用いて判定するというヒントを貰いましたが。自分で組んでいて上手く動きません。 どのように処理をしていけばいいでしょうか。 超初心者なので説明も付けていただくと有難いです。

  • c言語 型変換について

    c言語 型変換について 下記のように文字コードは、unsigned int型('B')をunsigned char 型(str[1] ) 格下げする型変換する規則を教えてください。 *質問ソースプログラム: int main(void) { char str[4]; /* 文字列を格納する配列 */ str[0] = 'A'; /* 代入 */ str[1] = 'B'; /* 代入 */ ・・・・・・ printf("size B %u\n",(unsigned)sizeof('B')); printf("size str[1] %u\n",(unsigned)sizeof(str[1])); * 実行結果 size B 4 size str[1] 1

  • 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言語の型キャスト

    C言語入門者です、よろしくお願いします C言語の型キャストについて教えてください 参考サイトで以下のようになってました char str[8] = "ABC"; char *ptr; ptr = (char*)str; printf("char型ポインタのアドレス先の値は: %s\n", ptr); この型キャストって意味ありますか? キャストしようがしなかろうがptrに収まるのはstrの先頭アドレスですよね? ただ型キャストを説明するためだけにこのような形にしているのか 意味がある型キャストなのかが解らず迷ってます