• 締切済み

C言語超超初心者です。学校の課題で悩んでます

C言語超超初心者です。学校の課題で次のような文字列問題に悩んでいます。 C言語初心者です。学校の課題で次のような文字列問題に悩んでいます。 文字列2つを入力させ(str1, str2)、str1の内番目(入力させる)にstr2を挿入する。結果はstr1に入れる。 (結果例) str1 : 123456 str2 : aa 挿入箇所 : 3 結果 : 12aa3456 --------------------------------------------------------------------------------------------------------------- この問題がどのような流れて処理をするかも全くわかりません。 超初心者なので分かりやすくご回答いただければありがたいです

みんなの回答

回答No.5

str1の文字列格納用領域がstr2を挿入しても十分あると保証されているなら、 str1の挿入以降部分をstr2の文字数分後ろにずらせて、str2を挿入するのも一つの方法かと思います。 #include <stdio.h> int main( void ) { char str1[128]; char str2[64]; int inspos, len1, len2; printf( "String1 Input[Max Length 64]: " ); scanf( "%64s", str1 ); printf( "String2 Input[Max Length 64]: " ); scanf( "%64s", str2 ); printf( "Insert Position: " ); scanf( "%d", &inspos ); for( len2=0; '\0' != str2[len2]; len2 ++ ); for( len1=0; '\0' != str1[len1]; len1 ++ ); if( 0 > inspos || len1 < inspos ) { printf( "Insert Position BAD.\n" ); return 1; } for( ; inspos<=len1; len1 -- ) { str1[len1+len2] = str1[len1]; } -- inspos; for( len2=0; '\0' != str2[len2]; len2 ++ ) { str1[inspos+len2+1] = str2[len2]; } printf( "Inserted Str: %s\n", str1 ); return 0; }

全文を見る
すると、全ての回答が全文表示されます。
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

(「悩み事」は、カテゴリが違う、と思いますが・・) >C言語超超初心者です。学校の課題で次のような文字列問題に悩んでいます。 「赤ちゃんです。学校の給食で硬いもの食べられなくて悩んでいます」・・ですね。 赤ちゃんなら硬いもの食べられなくて当たり前だから、悩む必要はないと思います。 「歯が生えそろっていない者に硬いもの出すな!」と開き直ってみるのも手かと。 または、反対に「こんな俺でも、毛が生えそろっている、と『見える』のか」と喜ばなくては。 ところで、学費払ってるの?。 受講資格がないんなら前の開き直り、通用しません。 隣の講義の課題なんて、無視すればいいです。 ★少なくとも、悩む必要はないです(断言)。 ++++++++++++++++++++++++ 少なくとも、#3 さんの回答に反応?しないと、↑こんなことしか「悩み事相談対応」できません。 反応例) ・画面出力でもって挿入したように「見せる」のではなく、実体として文字列中に「挿入する」という課題です。 (↑これ、課題としては大いにありそう・・) ともかく、反応してみてよ。 その際、「全くわかりません」なんて言わず、できるとこまで書いて。   str1 の「入力を促す」には・・と考えると、少なくとも3つの **** が必要となり、   それには、#include <stdio.h> が必要と分かれば、相当進むはず。 上段の中頃に typo がある、なんては反応しないでね。

全文を見る
すると、全ての回答が全文表示されます。
  • LOHA
  • ベストアンサー率52% (203/388)
回答No.3

流れ。宣言、エラー処理は適宜すること。 a, bのバッファ確保 "str1:"の出力、入力を文字列としてaに取得 "str2:"の出力、入力を文字列としてbに取得 "挿入箇所:"の出力、入力を数値としてcに取得 "結果:"の出力 aの先頭からc-1文字出力、bを出力、aの残りを出力

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

質問。 - 0番目/-25番目/36872番目に挿入しろって入力したらどうします? - 文字列の領域を超える場合は? - 長さ0の文字列の場合は?

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

試験会場から投稿していませんか?

xg2ig254
質問者

補足

だったら面白いのにね~

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

関連するQ&A

  • 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言語の課題で困ってます; 学校の課題で、キーボードから文字を入力する(最大80文字)。入力された文字列と、入力した文字列を逆順にした文字列を表示する。(malloc,freeを使って作成して下さい) ヒントで #invlude <stdio.h> void main(void){ char *buf; //入力文字列用 char *seq; //入力文字列用コピー用 char *rev; //逆順文字列用 int lec, i; buf =(char*)malloc(81); printf("文字列を入力:"); scanf("%s"buf ); for(i = 0; buf[i] ??? '\0'; i++){ } Ien = i; /* lenに文字列の長さが入る */ seq = ???(??? + 1); /* len+1文字文確保*/ for(i = 0; ???; i++){ seq[0] = buf[0]; } free(buf); rey = ???(len + 1); for(i = 0; < len; i++){ rev[len - i - 1] = seq[i]; } ren[i] ~ '\0'; printd("入力文字列 : %s\n",sep); でたんですが、全然分からなくて足りない部分の答えを教えてもらえると助かります;

  • C初心者に課題をください。

    現在学校でC言語の勉強をしています。 自分のC言語の実力は、基本情報のC言語がちょっと理解できるぐらいです。 しかも、Cを読むのは慣れていますが、あまり書いたことはありません。 そこで、C言語の実力向上を図って、自分に課題を出していろんなプログラムを作って行きたいのですが、さっそく何を作ればいいのかわかりません。 過去に自分がこんなプログラムを作ったとか、よい案がありましたら何でもいいので是非教えてください。 大体の機能と、あればヒントとか教えてくれる程度でいいです。 例) どんなプログラム?:電卓 機能:入力例(500*3)→表示(1500) 四則演算ができる。 続けて演算子と数値を入力すると表示結果と計算する。 よろしくお願いします。

  • C言語

    課題なんですが、C言語で 「文字列と正数nをキーボードから入力して、1行n文字で改行するプログラム」 をつくりたいのですが、わかりません。どうすればよいのですか?

  • 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言語の問題で困っています。 途中までできたのですが、この先が分かりません。 教えて頂くようお願いいたします。 【問題】 文字列の長さを求めるプログラムです。このプログラムを、入力した文字列の文字列長を求めるように変更してみましょう。  ただし、入力する文字列は半角で最大 20 文字までとし、指定された範囲外の値( 21 以上)が入力された場合は、正しい値が入力されるまで入力処理を繰り返すこと。 #include <stdio.h> int main(void) { char str[256] = "Hello"; int length, i; printf("文字列:"); scanf ("%s",str); length=0; i=0; while (str[i]!='\0') { i++; length++; } printf("\n文字列長:%d\n",length); }

  • C言語のプログラミングですが、

    C言語のプログラミングですが、 255文字以内の文字列をキーボードから入力して、下記の各処理を行うプログラム(※入力した文字データは配列に入力)はどのようにしたらいいでしょうか?(入力例:acFNkeexFFg) ・入力した文字列の最後の文字を出力 ・入力した文字列⇒逆に並べ替えて出力 ・入力した文字列⇒縦に出力(1文字ずつ) ・入力した文字列の中に「F」が何個あるか ただし、使えるのはfor文・配列・if文ぐらいでそれ以上レベルの高いものは使わないで下さい。 … char str[255]; int i,n,na,nb,nc; printf("Input Strings= "); scanf("%s",str); for(i=0;str[i]!='¥0';i++){ n=i; } printf("The last character= %c",str[n]); くらいまでしか分かりません…

  • C言語の課題

    大学でC言語の課題がでて、わからないので質問しました。 課題が人数をキーボードから入力する。 人数分の得点を入力して成績を表示する。 結果をファイルに保存する。 A 80~100点 B 70~79点 C 60~69点 D 60点未満 との事でした。 授業では、fp、printf、scanf、else、などを使いました。 よろしくお願いします。

  • C言語プログラミング 初心者

    現在2つの文字列を比較するstrcmp()関数と同じ動作をするプログラムを制作しています。 もちろん、strcmp()は一切用いません。 何とか作ってみたものの、文字列が等しいときなどにはうまく作動しません。 分かる方アドバイスお願いします。 以下のプログラムでは2つの50文字以下の文字列を入力することを想定しています。 #include<stdio.h> int main(void) { char str1[50],str2[50]; int a,b,i; printf("第1の文字列を入力してください: "); gets(str1); printf("第2の文字列を入力してください: "); gets(str2); /*文字列の長さを確認します*/ for(a = 0;str[a];a++) ; for(b = 0;str2[b];b++) ; printf("%s ha %d mozinonagasadesu\n",str1,a); printf("%s ha %d mozinonagasadesu\n",str2,b); /*文字列を比較します*/ for(i = 0;;i++){ if(str1[i] > str2[i]) printf("%s は %s より大きい\n"str1,str2); else if(str1[i] < str2[i]) printf("%s は %s より小さい\n"str1,str2); if(str1[i] > str2[i] || str1[i] <str2[i]) break; } for(i=0;str1[i] && str2[i];i++) if(str1[i] == str2[i] ) printf("文字列は等しい\n"); /*上のプログラミングだとstr1がaab、str2がaacのときも文字列が等しいと表示してしまうので、ぴったり等しいときのみ表示するにはどのように条件付けしたらよいでしょうか?*/ return 0; } ちなみにstr1[0]=a ,str1[1]=b, str2[0]=a, str[1]=b, str[2]=cが格納されていた場合、str1 < str2になると思うのですが正しいでしょうか? もし正しければこの場合str1[2]にはヌル文字が入っており、それがstr2[2]のcと比較されたためなのでしょうか? いろいろと質問してしまいましたが、分かる方解答お願いします。