• 締切済み

C言語についての質問です

C言語についての質問です キーボードから文字列を入力しそれらを結合して行くことで長い文字列を作成する "Q"を入力した場合入力終了する "F"を入力した場合既存の文字列の前部に追加文字列を加える "R"を入力した場合既存の文字列の後部に追加文字列を追加する。 追加文字列はF,Q,Rのいずれかを入力したのちにキーボードより入力する。 またグローバル関数を使用しないでプログラムを作成する。加えてmain関数とは別に次の様な関数を作成し利用する 戻り値 : 無し(void型) 引数1 : コマンド文字列(Q,F,Rなどの追加文字列の追加場所を決定するchar型配列) 引数2 : 追加文字列(char配列) 引数3 : 追加される側の文字列(char配列) どうしてもグローバル関数を使用しないで作成することができません。また後部への追加文字列の追加はstrcat関数を使い実現することができましたが前部への追加文字列の追加の方法がわかりません。アドバイスやヒントなど何でもいいので指導のほどよろしくお願いします。

みんなの回答

  • chikuwabu
  • ベストアンサー率25% (19/76)
回答No.1

>グローバル関数を使用しないで作成することができません。 構造体とポインタを使う >後部への追加文字列の追加はstrcat関数を使い実現することができましたが前部への追加文字列の追加の方法がわかりません。 sprintf >アドバイスやヒントなど何でもいいので指導のほどよろしくお願いします。 アドバイス:C&C++カテゴリというのがあります.

関連するQ&A

  • 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言語について教えてください。

    二次元配列でまとめられた「配列で実現する文字列」の文字と文字列を表示する関数を定義し、その関数の機能を確認するプログラムを作成する。 ただし、以下の例のように文字列の個数が変更されても処理できる関数を作成する。 また、文字列の文字の個数は最大9とする(一次元配列の要素数は10とする) さらに、関数printf()をできるだけ用いない。 (1)二次元配列でまとめられたすべての文字列を「一度に」表示する関数を定義する (2)二次元配列でまとめられたすべての文字列の文字を「一度に」表示する関数を定義する。このとき、前回の課題で定義した「すべての文字を表示する関数print_all_char()」を新しく定義する関数から呼び出して用いる。 (3)二次元配列に各文字列を格納してまとめるとき、初期化ではなく、配列の宣言・定義の後で、関数strcpy()を用いること(例では、初期化によりまとめている) [例] char astr[][10] = { "ABCD", "EFGHIJ", }; [実行結果の例] すべての文字列の表示 ABCD EFGHIJ すべての文字列の文字の表示 A B C D E F G H I J [ヒント] (1)二次元配列でまとめられた文字列の文字あるいは文字列を表示する関数<返却値型><関数名>(二次元配列の受け渡しに対応した仮引数の宣言、文字列の数) (2)文字列の数を求める。二次元配列のすべての要素に文字列が格納されている場合、文字列の数=二次元配列の要素数(一次元配列の数) =sizeof(astr)/sizeof(astr[0]) ただし、sizeof演算子の生成する型はsize_t型である。 この問題について教えてください。問題丸投げだとは分かっていますがどうしても分かりません。教えてください。ちなみに前回の課題の定義は下の通りです。 void print_all_char(char *chs) { while(*chs!='\0') { printf("%c\n",*chs); chs++; } } よろしくお願いします。

  • C言語の基礎

    1.main関数の引数である、int argc と char **argvはどのように使用するのでしょうか? 2.特定の文字列(UserID)を入力し,それぞれの文字が使用可能文字列(数字とアルファベット(大文字小文字)と一致したら,使用可能文字列(配列)から削除し,残りの配列の文字を使って6~8文字のパスワードを作成するにはどのように関数を設計すればいいでしょうか? パスワードを作成するのに時刻を種とした乱数を使用してある一文字を取得するという方法を考えました。 srand(unsigned time(NULL); パスワードはUserIDに使用した文字を含まないようにしたいので,(使用可能文字列)-(UserID)= パスワードに使用できる文字列になると思うのですが, 配列-配列なんてできるのでしょうか?実力不足のため,変な質問をして申し訳ございません。どうかご教授ください。

  • C++の関数

    関数の課題が出たんですが分からないので教えてください。 第1引数と第2引数はchar型の1元配列であり、これら2つの配列(文字列)を連続して表示する関数catstringがあるものとする。 ただし第2引数にはデフォルトの文字列"あいうえお"が設定されている。main関数からキーボード入力で2つの文字列を取得し、 catstringの第1引数のみに文字列が渡される場合と第1、2引数ともに文字列が与えられるプログラムを作成せよ。 やってみましたがエラーが出てしまいます。 #include <iostream> #include <cstdlib> using namespace std; char catstring(char,char="あいうえお"); int main() { char a,b; cin>>a; cin>>b; cout<<catstring(a)<<endl; cout<<catstring(a,b)<<endl; return EXIT_SUCCESS; } char catstring(char x,char y) { char s; s=x+y; return(s); }

  • C言語のプログラミングについてです。

    C言語のプログラミングについて教えて欲しいです。 scanf関数を用いて、キーボードから文字列(最大30文字)を読み込み、これをchar型配列に格納します。最大10個までの文字列が入力された場合か、「END」が入力された時、入力された逆順で画面に表示するプログラム。作成しなさい。 〈完成例〉 adjm 10mdjp jpd-4 njad' END njad jpd-4 10mdjp adjm

  • C言語 ポインタ型引数の呼び出しについて

    C言語 ポインタ型引数の呼び出しについて 私が作成したのではないのですが下記のような関数があります。 この関数は文字列を渡すとカンマ(,)で分割して返してくれる関数 らしいのですが、使用方法がわからず、こまっています。 char* abcdef(char** p) 当方としては下記のような変数定義を行っているのですが char cbuff[128]; //文字列(カンマを含めた) char *coutbuff[128]; //分割された文字列 理想としてはこんな感じで呼び出したいのですが strcpy(cbuff,"0,,123,45,6"); coutbuff=abcdef(cbuff); どのように呼び出したらよいかご教示願います。

  • c言語がわかりません

    (1)数学関数(cos)を用いて、10度から50度まで10度刻みのcos値の表を表示するプログラムを作成。 数学関数のヘッダファイル:<math.h> cos関数:cos(ラディアン値) (double型) ラディアン値 r=d*(3.14159/180) (2)文字列の大小比較を行なうstrcmp関数を用いて、入力された2つの文字列の大小比較を行い、結果を表示するプログラムを作成。 strcmp関数形:int strcmp(a,b) a,bは文字列(文字配列) 戻り値:a<bなら負、a=bなら0,a>bなら正

  • 【C言語教えて下さい!】文字検索

    引数として、複数の文字列を格納した配列、その文字列数、あるいは文字列aを与え、aが複数の文字列を格納した配列中に見つかれば1を返し、見つからなければ0を返す関数find_string()をつくりたいのですがよくわかりません。 どなたかご教授お願いします。 ヒントや考え方など教えて下さい。

  • 配列の参照渡し

    以下の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言語について教えてください。

    #include <string.h> #include <stdio.h> void print_all_char(char *str) { while(*str! = '\0') { printf("%c\n", *str); str++; } } int main(void) { char astr[5]; char *pstr; strcpy(astr, "ABCD"); pstr = "EFGHI"; puts("「配列で実現する文字列」を表示する"); puts(astr); puts("「配列で実現する文字列」のすべての文字を表示する"); print_all_char(astr); puts("「ポインタで実現する文字列」を表示する"); puts(pstr); puts("「ポインタで実現する文字列」のすべての文字を表示する"); print_all_char(pstr); return 0; } 自分でつくった上のプログラムではエラーが発生します。 なぜだか分かりません。教えてください。 ちなみに、実行結果は 「配列で実現する文字列」を表示する ABCD 「配列で実現する文字列」のすべての文字を表示する A B C D 「ポインタで実現する文字列」を表示する EFGHI 「ポインタで実現する文字列」のすべての文字を表示する E F G H I のようにしたいです。 よろしくお願いします。