• 締切済み

C++のプログラムを作って頂けませんか?

ソースをこちらにお願い致します!全て別のプログラムです cin.getline()を使用すること。また、stringクラス及び標準ライブラリの文字列関連の関数は使用しないこと 一つ目。 文字を入力すると、文字列中のアルファベット大文字を小文字に変換するプログラム。入力できる文字数は最大80文字。 例 入力:ABcdEFgh 結果:abcdefgh 二つ目。 文字列を入力すると、文字を循環しているように見えるプログラム。入力できる文字数は最大80文字。 例 入力:Hello 結果: Hello elloH lloHe loHel oHell Hello 三つめ。 文字列を入力すると、文字が逆順になるプログラム。入力できる文字数を最大80文字とする。 例 入力:Hello 結果:olleH どなたかお願いします!

みんなの回答

回答No.5

/* これをそのまま提出すると おそらく呼び出し食らいます。 */ #include <iostream> #include <algorithm> #include <iterator> /* 文字を入力すると、文字列中のアルファベット大文字を小文字に変換するプログラ ム。 */ void one(char* first, char* last) { std::transform(first, last, first, [](char ch) { return ( ch >= 'A' && ch <= 'Z' ) ? ch - 'A' + 'a' : ch ; }); } /* 文字列を入力すると、文字を循環しているように見えるプログラム。 */ void two(char* first, char* last) { for ( char* start = first; start != last; ++start ) { std::rotate(first, first+1, last); std::cout << first << std::endl; } } /* 文字列を入力すると、文字が逆順になるプログラム。 */ void three(char* first, char* last) { std::reverse(first, last); } /* 上記みっつを呼び出す */ int main() { const int N = 80; char line[N]; std::cin.getline(line, N); char input[N]; std::copy(std::begin(line), std::end(line), std::begin(input)); char* first = input; char* last = std::find(std::begin(input), std::end(input), '\0'); std::cout << "---- [1]\n"; one(first, last); std::cout << input << std::endl; std::cout << "---- [2]\n"; std::copy(std::begin(line), std::end(line), std::begin(input)); two(first, last); std::cout << "---- [3]\n"; std::copy(std::begin(line), std::end(line), std::begin(input)); three(first, last); std::cout << input << std::endl; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

これ, 学校の課題ですか? そして, 自分では何も考えず他人の書いたプログラムを丸写ししておきながら, あたかも自分で作ったかのように見せようという魂胆ですか? 1番目は, それではおかしいのでは>#3. 大文字→小文字の変換をそのように書く必然性はないですよ. 「標準ライブラリの文字列関連の関数」ってのは, いったいどこまでを指すんだろ....

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.3

だいたい下記の様な処理の流れになると思います。 変数としては入力表文字列、出力文字列の配列、ループカウンタ、三番目は文字数カウント用の変数くらいですね。 3つとも大体似た様な処理になります。いきなりコードを書かないで、一旦下記の様に処理の流れを整理すると良いですね。 1番目 入力された文字列の先頭から一文ずつ取り出し、出力用の文字列へ順次コピーする。 その際に、’A'以上、’Z'以下の文字は、0x20を加算してからコピーする。 この処理は、入力文字列の最後(ヌル)になるまで繰り返し、最後に出力用文字列の最後にヌルを代入して出力文字列を表示する。 2番目 入力された文字列の二文字目から一文字ずつ取り出し、出力用文字列の先頭から順次コピーする。 この処理は、入力文字列の最後(ヌル)になるまで繰り返し、最後に出力用文字列に入力用文字列の先頭文字と、ヌルを代入し、出力文字列を表示する。 3番目 入力された文字列を先頭からチェックし、文字数をカウントしていく。入力文字列の最後(ヌル)になるまでカウントを繰り返す。 入力文字列のN番目~1番目を出力文字列の先頭から順次コピーする。 最後に出力文字列の最後にヌルを代入し、出力文字列を表示する。

  • neko3839
  • ベストアンサー率37% (100/268)
回答No.2

これは難しくはないでしょう。 配列やポインタを勉強して、もう一度考えてみて下さい。

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

課題なら、自分で作らないと試験の時に困りますよ。 せめて、自分がどこまでやったかを教えてもらえませんか? で、何がわからないかを教えて下さい。

関連するQ&A

  • c言語によって文字列を逆順するプログラム

    文字列の並びかたを逆にするプログラムを作るのですが、関数はtoreverse()という関数を作ってプログラムをつくらないといけません>< ちなみに、この関数が逆順にする関数です。あと文字列は最大100文字です。 わかる方いらっしゃいましたらお願いします。

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

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

  • 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

  • Visual C++の簡単なプログラムについて

    Visual C++で以下のようなプログラムまたは関数を作りたいのでアルゴリズムもしくはヒントを教えてください。 (1) 入力された文字列の文字数を算出するプログラム (2) 『abc』→『abcabc』のように引数として受け取った文字列を2回繰り返した文字列に変換する関数

  • getlineについて

    現在getlineを用いてプログラムを作成しようとしているのですが、例えば #include <iostream> using std::cin; using std::cout; using std::endl; int main(){ char buffer[81]; while(!cin.eof()){ cin.getline(buffer,sizeof(buffer)); cout << buffer << endl; while((!cin.eof())&&cin.fail()){ cin.clear(); cin.ignore(80,'\n'); } } return 0; } というプログラムを作った場合、標準入力から各行を80文字だけ読み込み出力をするわけなんですが、 この80文字という文字制限をなくしたい場合どういった工夫をすればいいのでしょうか?

  • このプログラムどうやったら??

    引数として受け取った文字列を逆順にした文字列に変換する関数なんですけども、全くわかりません。教えていただけませんか?? つまりは、キーボードから入力した文字列を逆順に表示させるってことなので、 void str_reverse(char src[]) を使えばいいのかと思うのですが、、、 Osaka Dome→emoD akasO みたいな感じなんですけれども。。。 お願いします!

  • c言語 プログラム

    文字列ringo[ ]、文字列mikan[ ]が与えられ(ringo[ ]とmikan[ ]は1以上の文字列が必ず入っているもの)、文字列ringo[ ]中に文字列mikan[ ]が含まれるときは最初にあらわれるその文字の先頭の位置(0~)を返し、含まれないときは-1を返す関数suikaのプログラムを教えてください。 また、その関数を用いて、2つの文字列ringo[ ]とmikan[ ](空白は含まない)を入力すると関数suikaの値を返すプログラムを教えてください。 (例1 ringo[ ]:abcdefghijklmn mikan[ ]:abc abcは0 (例2 ringo[ ]:abcdefghijklmn mikan[ ]:efghij efgは4 (例3 ringo[ ]:abcdefghijklmn mikan[ ]:xyz xyzは-1

  • C言語での並び替えのプログラム

    A[6][5]={{"abei"}, {"aceh"}, {"adeg"}, {"aef"}, {"bcfi"}, {"bdfh"}}; と配列があるとします。 (a).A[1][5]の文字列とA[2][5]の文字列を比較して、"abceih"という組み合わせた文字列を作り、その文字列の数を出します(この場合6個)。次に、A[3][5]のA[4][5]を比較して組み合わせて文字列を作り、その文字列の数を出します。A[5][5]とA[6][5]も同じように比較して組み合わせて文字列を作り、その文字列の数を出し、最後にそのすべての数の和を出します。 (b).この配列を並べ変えて(a)をします。 並び替え方は配列6個のとき 1.(1)(2)(3)(4)(5)(6) 2.(1)(2)(3)(5)(4)(6) 3.(1)(2)(3)(6)(4)(5) 4.(1)(3)(2)(4)(5)(6) 5.(1)(3)(2)(5)(4)(6) 6.(1)(3)(2)(6)(4)(5) 7.(1)(4)(2)(3)(5)(6) 8.(1)(4)(2)(5)(3)(6) 9.(1)(4)(2)(6)(3)(5) 10.(1)(5)(2)(3)(4)(6) 11.(1)(5)(2)(4)(3)(6) 12.(1)(5)(2)(6)(3)(4) 13.(1)(6)(2)(3)(4)(5) 14.(1)(6)(2)(4)(3)(5) 15.(1)(6)(2)(5)(3)(4) の15通りになります。 この配列の並びを前から配列を2つずつ取り出して比較すれば全組み合わせが完了したことになります。 この15通りの組み合わせの中で総和が一番少なくなる組み合わせ方を探すプログラムを作りたいのです。 そしてこのとき、配列が最大で40個までとなることがあるとするとその並べ替えのプログラムはどうなるでしょうか? 比較するプログラムは作ることに成功しましたが並べ替えのプログラムがうまく作れません誰か教えていただけないでしょうか?

  • プログラミングC

    以下に示すプログラムは、キーボードから39文字以下の文字列を入力した後で、その文字列を表示するプログラムである。ただし、文字列の表示においては、printf命令における変換指定で、%sを使用するのが一般的であるが、以下のプログラムあえて%sを使用せずに、%cを使っている。このプログラムについてキーボードから入力される文字列の文字数が391文字以下である限り、その文字列を正しく表示できるよう、下線部を埋めてプログラムを完成させなさい。 char x[40],i printf("39文字以下の文字列を入力:"); scanf("%s",x); for(i=0;x[i]_____;i++) printf("%c",x[i]); printf("です。\n"); [実行例] 39文字以下の文字列を入力:programming 入力された文字列はprogrammingです。

  • C言語です。よろしくお願いします

    何をすればいいのかがさっぱりです 文字列を入力 入力された文字列について 次の(1)~(6)のすべてを表示するプログラムを作成 (1) 全文字の合計文字数 (2) 数字の文字数 (3) 英大文字の文字数 (4) 英小文字の文字数 (5) 空白の文字数 (6) その他の文字の文字数 データの読み込みはgetchar 関数を使用 実行例 total = (1) numeric= (2) large = (3) small = (4) space = (5) other = (1)-(2)(3)(4)(5) よろしくお願いします

専門家に質問してみよう