課題が・・ – プログラミング – Home

通知
すべてクリア

[解決済] 課題が・・

固定ページ 1 / 2

宇喜田
 宇喜田
(@宇喜田)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

宇喜田

今回、課題に出されたのですがどうにも独学で学んだせいか
よくわかりません。皆様の力を貸してもらえると嬉しいです。

課題
255文字以内の英文を入力し、大文字は小文字に、小文字は大文字に変換
して出力するプログラムを作成しなさい。
ただし、文字の変換には作成した関数を利用し、英文字以外はそのまま表示
させてください。また関数は2つ以上作成する。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 皆様の力を貸してもらえると嬉しいです。

ではご質問をどうぞ。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

/* 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!


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

これを読んで中身がわかるくらいならここに聞きに来ないだろうなぁ。

因みにこれを丸写しにしても多分、説明できないでしょうから
中身を理解してから使わせてもらうか、
自力で何とかした方がよろしいかと。

中身が理解できればそれなりに力が付くだろうし、
理解するために色々調べれば身になる部分もあるでしょうからね。

因みにこういうところに質問するんでしたら
せめて自分で書いたコードくらい提示する物です。
その上で何処がわからないのかきちんと説明してください。

全く見当も付かないのであれば、その問題を出した先生に相談しましょう。
授業料を払っているのであれば、それは当然の権利ですから。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

> 因みにこれを丸写しにしても多分、説明できないでしょうから

丸写しで提出したら職員室に呼び出し食らうでしょうなぁ ^^;


返信引用
monkey
 monkey
(@monkey)
ゲスト
結合: 21年前
投稿: 70
 

まあ、何かとっかかりでもないと始まらないでしょうから、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; // 英文字でなければそのまま返す
}


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

マルチする前に投稿したところに返事がついているかどうかくらい確認しようよ。

http://www.mtakahashi.com/log/11855.html


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

>επιστημη さん
「関数は2つ以上作成する」ってのは、main と operator() でいいのかなぁ^^;


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

monkeyさん、やさしいなぁ。

私なら、多分、使う関数くらいしか提示しないかも。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

>「関数は2つ以上作成する」ってのは、main と operator() でいいのかなぁ^^;

# ないすツッコミ(ボケ?)。 (^^
……いいんじゃないでしょか。どっちも関数には違いないし。


返信引用
monkey
 monkey
(@monkey)
ゲスト
結合: 21年前
投稿: 70
 

> monkeyさん、やさしいなぁ。

今日から盆休みでヒマなの^^


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

ためしに作ってみたら、

>255文字以内

この仕様をスマートに満たすのが難しい。
256文字以上あったらエラーとか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

>>255文字以内
> この仕様をスマートに満たすのが難しい。
> 256文字以上あったらエラーとか?

あ、確かに。 いっそ標準入力をまるっと吸い込んで標準出力に吐いた方が楽ね。

int main() {
int ch;
while ( (ch = getchar()) != EOF ) {
putchar(変換(ch));
}
return 0;
}


返信引用
スマイルバナナ
 スマイルバナナ
(@スマイルバナナ)
ゲスト
結合: 20年前
投稿: 2
 

シャノンさんはマルチの番人ですか?


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

とりあえず、そうですと言っておこう。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました