宇喜田
今回、課題に出されたのですがどうにも独学で学んだせいか
よくわかりません。皆様の力を貸してもらえると嬉しいです。
課題
255文字以内の英文を入力し、大文字は小文字に、小文字は大文字に変換
して出力するプログラムを作成しなさい。
ただし、文字の変換には作成した関数を利用し、英文字以外はそのまま表示
させてください。また関数は2つ以上作成する。
> 皆様の力を貸してもらえると嬉しいです。
ではご質問をどうぞ。
/* 255文字以内の英文を入力し、大文字は小文字に、小文字は大文字に変換
* して出力するプログラムを作成しなさい。
*
* ご参考 : C++版
*/
#include <iostream> // cout, endl
#include <string> // string
#include <algorithm> // transform
#include <functional> // unary_function
struct change_case : std::unary_function<char,char> {
static std::string lower;
static std::string upper;
char operator()(char c) const {
std::string::size_type pos;
// 小文字なら大文字へ
if ( (pos = lower.find(c)) != std::string::npos )
return upper[pos];
// 大文字なら小文字へ
if ( (pos = upper.find(c)) != std::string::npos )
return lower[pos];
// あるいはそのまま
return c;
}
};
std::string change_case::lower = abcdefghijklmnopqrstuvwxyz;
std::string change_case::upper = ABCDEFGHIJKLMNOPQRSTUVWXYZ;
int main() {
std::string input = This String Should be CHANGED!;
std::string result(input.size(),' ');
// 変換
std::transform(input.begin(), input.end(), result.begin(), change_case());
// 結果出力
std::cout << input : << input << std::endl;
std::cout << result: << result << std::endl;
return 0;
}
-- 実行結果 --
input : This String Should be CHANGED!
result: tHIS sTRING sHOULD BE changed!
これを読んで中身がわかるくらいならここに聞きに来ないだろうなぁ。
因みにこれを丸写しにしても多分、説明できないでしょうから
中身を理解してから使わせてもらうか、
自力で何とかした方がよろしいかと。
中身が理解できればそれなりに力が付くだろうし、
理解するために色々調べれば身になる部分もあるでしょうからね。
因みにこういうところに質問するんでしたら
せめて自分で書いたコードくらい提示する物です。
その上で何処がわからないのかきちんと説明してください。
全く見当も付かないのであれば、その問題を出した先生に相談しましょう。
授業料を払っているのであれば、それは当然の権利ですから。
> 因みにこれを丸写しにしても多分、説明できないでしょうから
丸写しで提出したら職員室に呼び出し食らうでしょうなぁ ^^;
まあ、何かとっかかりでもないと始まらないでしょうから、C言語による大文字小文字
変換用関数の作成例を。
#include <ctype.h>
int to_upper_or_lower( int c )
{
if( islower( c ) )
return toupper( c ); // 英小文字なら大文字を返す
if( isupper( c ) )
return tolower( c ); // 英大文字なら小文字を返す
return c; // 英文字でなければそのまま返す
}
>επιστημη さん
「関数は2つ以上作成する」ってのは、main と operator() でいいのかなぁ^^;
monkeyさん、やさしいなぁ。
私なら、多分、使う関数くらいしか提示しないかも。
>「関数は2つ以上作成する」ってのは、main と operator() でいいのかなぁ^^;
# ないすツッコミ(ボケ?)。 (^^
……いいんじゃないでしょか。どっちも関数には違いないし。
> monkeyさん、やさしいなぁ。
今日から盆休みでヒマなの^^
ためしに作ってみたら、
>255文字以内
この仕様をスマートに満たすのが難しい。
256文字以上あったらエラーとか?
>>255文字以内
> この仕様をスマートに満たすのが難しい。
> 256文字以上あったらエラーとか?
あ、確かに。 いっそ標準入力をまるっと吸い込んで標準出力に吐いた方が楽ね。
int main() {
int ch;
while ( (ch = getchar()) != EOF ) {
putchar(変換(ch));
}
return 0;
}
シャノンさんはマルチの番人ですか?
とりあえず、そうですと言っておこう。