プロが教えるわが家の防犯対策術!

ソースをこちらにお願い致します!全て別のプログラムです

cin.getline()を使用すること。また、stringクラス及び標準ライブラリの文字列関連の関数は使用しないこと
一つ目。
文字を入力すると、文字列中のアルファベット大文字を小文字に変換するプログラム。入力できる文字数は最大80文字。
例 入力:ABcdEFgh
結果:abcdefgh

二つ目。
文字列を入力すると、文字を循環しているように見えるプログラム。入力できる文字数は最大80文字。
例 入力:Hello
結果:
Hello
elloH
lloHe
loHel
oHell
Hello

三つめ。
文字列を入力すると、文字が逆順になるプログラム。入力できる文字数を最大80文字とする。
例 入力:Hello
結果:olleH

どなたかお願いします!

A 回答 (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;
}
    • good
    • 0

これ, 学校の課題ですか? そして, 自分では何も考えず他人の書いたプログラムを丸写ししておきながら, あたかも自分で作ったかのように見せようという魂胆ですか?



1番目は, それではおかしいのでは>#3. 大文字→小文字の変換をそのように書く必然性はないですよ.

「標準ライブラリの文字列関連の関数」ってのは, いったいどこまでを指すんだろ....
    • good
    • 0

だいたい下記の様な処理の流れになると思います。


変数としては入力表文字列、出力文字列の配列、ループカウンタ、三番目は文字数カウント用の変数くらいですね。
3つとも大体似た様な処理になります。いきなりコードを書かないで、一旦下記の様に処理の流れを整理すると良いですね。

1番目
入力された文字列の先頭から一文ずつ取り出し、出力用の文字列へ順次コピーする。
その際に、’A'以上、’Z'以下の文字は、0x20を加算してからコピーする。
この処理は、入力文字列の最後(ヌル)になるまで繰り返し、最後に出力用文字列の最後にヌルを代入して出力文字列を表示する。

2番目
入力された文字列の二文字目から一文字ずつ取り出し、出力用文字列の先頭から順次コピーする。
この処理は、入力文字列の最後(ヌル)になるまで繰り返し、最後に出力用文字列に入力用文字列の先頭文字と、ヌルを代入し、出力文字列を表示する。

3番目
入力された文字列を先頭からチェックし、文字数をカウントしていく。入力文字列の最後(ヌル)になるまでカウントを繰り返す。

入力文字列のN番目~1番目を出力文字列の先頭から順次コピーする。
最後に出力文字列の最後にヌルを代入し、出力文字列を表示する。
    • good
    • 0

これは難しくはないでしょう。


配列やポインタを勉強して、もう一度考えてみて下さい。
    • good
    • 0

課題なら、自分で作らないと試験の時に困りますよ。



せめて、自分がどこまでやったかを教えてもらえませんか?
で、何がわからないかを教えて下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!