C言語関係掲示板

過去ログ

No.112.アルファベットをずらす


No.625

C言語勉強中。。。
投稿者----N(2001/12/05 09:58:46)
h


今C言語、勉強中なんですが分からないプログラムがあります。
換字暗号のプログラムなんですがアルファベット1文字ずらし(例Aー>B)
引数の文字がアルファベットだったら1文字後ろにずらした文字を返し、
そうでなかったらそのまま返す関数encode()を定義するやつで、英文テ
キストを暗号化するプログラムです。
まだ初心者なんであんまり難しい関数は使いたくないのでなるべく簡単な
関数がいいです。


No.626

Re:C言語勉強中。。。
投稿者---shu(2001/12/05 11:24:43)
http://c2c-1.rocketbeach.com/~finder_s/ccc/


>換字暗号のプログラムなんですがアルファベット1文字ずらし(例Aー>B)
>引数の文字がアルファベットだったら1文字後ろにずらした文字を返し、
>そうでなかったらそのまま返す関数encode()を定義するやつで、英文テ
>キストを暗号化するプログラムです。

それだったら、isalpha()でしょう。
<ctype.h>に入っています。
詳しくはリンク集の中にもある
■ Load to ... ■ C programing Master


if ( !isalpha( code ) ) { return code; }
return ++code;

isalpha() の他にも数字だけを判定するものや、大文字や小文字を判定する関数もあるので覚えておくといいでしょうね。


No.631

Re:C言語勉強中。。。
投稿者---中3(2001/12/05 16:21:41)


超初心者なんでもうちょっとかんたんのがいいんですが・・・。


No.632

Re:C言語勉強中。。。
投稿者---shu(2001/12/05 17:12:28)
http://c2c-1.rocketbeach.com/~finder_s/ccc/


>超初心者なんでもうちょっとかんたんのがいいんですが・・・。

-Nさんと中3さんは同じ人なのでしょうか???
(違ってたらごめんなさい)

ちょっと例を難しく書いてしまったんかな?

if ( code <= 'A' && code >= 'Z' || code <= 'a' && code >= 'z' ) {
}
こっちの方がわかりやすかったのでしょうか?
とりあえずif文について良く読んでみるといいと思いますよ。
(ASCIIコード表を参考にしてみました)


No.633

Re:C言語勉強中。。。
投稿者---中3(2001/12/05 21:11:31)


あと暗号化のプログラムはどんな風に書いたらいいんですかね???


No.634

Re:C言語勉強中。。。
投稿者---shu(2001/12/05 21:24:00)
http://c2c-1.rocketbeach.com/~finder_s/ccc/


>あと暗号化のプログラムはどんな風に書いたらいいんですかね???

++

No.635

Re:C言語勉強中。。。
投稿者---hoge(2001/12/05 22:31:42)


>あと暗号化のプログラムはどんな風に書いたらいいんですかね???

つーか、その分からないプログラムってのを勉強してるんじゃないんですか...?
回答に対するレスがあまりにもひどいです...。
きちんとレスしましょう。

通常の生活でこんな会話してたら完璧に信用なくすでしょう。
客観的にこのやりとりを見てみてください。
いかに会話になっていないか。

こんなこと書いたらレスないんだろうなぁ...。

No.638

Re:C言語勉強中。。。
投稿者---B.Smith(2001/12/06 00:09:28)


>>あと暗号化のプログラムはどんな風に書いたらいいんですかね???
>
>つーか、その分からないプログラムってのを勉強してるんじゃないんですか...?
>回答に対するレスがあまりにもひどいです...。
>きちんとレスしましょう。

残念ながら私も同感です。質問に来る人達は何かしらに困っているのですから、力になれる回答者として極力丁寧に答えてあげるべきだと思いますけど…

中3さんにサンプルとして関数を用意してみました。参考にしてみてください。

アルファベットを一文字ずらし…とあったのですが、'z'または'Z'をインクリメントすると、それぞれ'{'、'['となってしまうため、ここではインクリメントした文字を検査し、'z'(または'Z')の次の文字であった場合、'a'または'A'に戻す、といったことをしています。
この関数は1文字分を処理します。
例1
int     encode(int code)
{
    /* アルファベット文字をインクリメントする */
    if (code >= 'a' && code <= 'z' ||
        code >= 'A' && code <= 'Z'){
        code++;

        /* 次の文字がアルファベットでない場合('z'、'Z'の場合)、   */
        /* 'a'または'A'に戻す                                       */
        if (code == 'z' + 1 || code == 'Z' + 1)
            code -= 'Z' - 'A' + 1;
    }

    return code;    /* 結果を返す */
}

次の関数は文字列を処理します。一文字分の処理手順は変わりません。ポインタの勉強が終わり次第解読してみてください。
例2
void    EncodeString(char *Str)
{
    /* 文字列の末尾まで繰り返す */
    while(*Str){

        /* アルファベット文字をインクリメントする */
        if (*Str >= 'a' && *Str <= 'z' ||
            *Str >= 'A' && *Str <= 'Z'){
            (*Str)++;

            /* 次の文字がアルファベットでない場合('z'、'Z'の場合)、   */
            /* 'a'または'A'に戻す                                       */
            if (*Str == 'z' + 1 || *Str == 'Z' + 1)
                (*Str) -= 'Z' - 'A' + 1;
        }

        Str++;  /* 次の文字に移動する */
    }
}




No.639

Re:C言語勉強中。。。
投稿者---B.Smith(2001/12/06 00:31:52)


>残念ながら私も同感です。質問に来る人達は何かしらに困っているのですから、力になれる回答者として極力丁寧に答えてあげるべきだと思いますけど…

すいません。これは勘違い。

ただ、教え方をもうちょっと丁寧にした方が良いのでは…という意見は変わりません。すべての人が同じ理解力を持っているわけではないのですから。
教えてあげられる人として、もうちょっとつきあってあげてもいいのではないか、と思いますよ。



No.640

Re:C言語勉強中。。。
投稿者---shu(2001/12/06 12:32:41)
http://c2c-1.rocketbeach.com/~finder_s/ccc/


>ただ、教え方をもうちょっと丁寧にした方が良いのでは…という意見は変わりません。すべての人が同じ理解力を持っているわけではないのですから。
>教えてあげられる人として、もうちょっとつきあってあげてもいいのではないか、と思いますよ。
>

どこまで教えてあげるのがいいのかわかりませんが、
これ以上教えると答えになってしまうんですよね。

せめて
ヒント ++
と、書けば良かったんだろうと思っています。

他にも書きたいことも、いろいろありますが
C言語関係の掲示板で書くことでもないでしょうし、
討論の無限ループ陥ると、掲示板を利用されてる他の方にも
迷惑なので、ここで break しときます。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.01.11
Copyright(c) 2000-2002 TOMOJI All Rights Reserved