ZAMYLA CHAN:おめでとう あなたの仕上げに Cプログラムの最初のカップル。 私が知っているあなたの最初の進出に C言語の構文は、困難なことができます。 しかし、私の最後に、お約束いたします もちろん、あなたは見てできるようになります 割り当ての最初のカップルと 数分でそれらを完了。 今、あなたはより身近取得していることを 構文で、カエサルにましょう。 シーザーでは、ユーザーは提出します コマンドラインとして整数キー 引数、その後平野を入力してください プロンプトでテキストメッセージ。 プログラムは暗号化するでしょう テキストとプリント その暗号文メッセージ。 シーザーのために暗号化 非常に簡単です。 自分では、各文字をシフト キーによってプレーンテキスト、。 結果として、それはまた、周辺 かなり安全でない。 しかし、シーザーを実装する紹介します 当方ASCIIMathと配列データへ 構造。 私たちは、より複雑に買ってあげる 後で暗号。 2のシーザーキーの文字で プレーンテキストは次式で表されます 暗号文の文字のCなぜならC A. Bの後に2文字は次のようになりますです 向けE.によってDとCで表さ アルファベットの最後、Wは しかし、Z. YによってY、およびXで表される そう、それの後に2文字を持っていない 暗号は、アルファベットを包み込む。 プレーンテキストでは、このようにYで表される。 B.それは可能性によって暗号文、およびZで のようにシーザーサイファーを表示するために役立つ 連続アルファベットホイール。 彼らのテキストは、ユーザを暗号化するには 二つの引数を入力します コマンドラインに - 。/シーザーは、キーが続く。 いつものように、私たちは、ユーザーを信頼することはできません 完全に作る入力を入力する 私たちのプログラムのための感覚。 だから我々は彼らを検証する必要があります コマンドライン入力。 代わりにint型のメイン空間を使用するのでは、我々はしている int型のmainはint argcは、文字列ARGVを使って。 のargcが表す整数変数 に渡された引数の数 コマンドライン。 とargvは次のように配列であるか、それを考える 引数のリストが渡された だからシーザーのために、我々はどのように検証するか ユーザーの入力? まあ、彼らは唯一の入力すべきである 2つのコマンドライン引数 - 。/シーザーとキー。 argcは2でない場合、だから、それはつまり、 それらのいずれかのキーを忘れてしまったし、ちょうど 入力。/シーザー、またはそれら 複数のキーを入力した。 これが事実である場合は、よ 手順を印刷したい とプログラムを終了します。 彼らは再試行する必要があります コマンドラインから。 しかし、argcは2であっても、あなたはよ 彼らかどうかを確認する必要があります あなたに有効な鍵を与える。 シーザーでは、整数値を必要とする。 しかし、ARGVは、文字列の配列です。 どのようにして、そのキーにアクセスできますか? 配列で簡単に見 - 複数保持するデータ構造 同じデータ型の値。 エントリはゼロインデックス付きであることを意味 最初の要素のインデックスはゼロです 最後の要素は、インデックスサイズである サイズは数あるマイナス1、 配列内の要素。 私は、新しい文字列配列のメールボックスを宣言した場合 長さ3の、視​​覚的に、それ このように見えます。 文字列の3つのコンテナ 、サイドバイサイド。 任意の要素にアクセスするには、名前を入力します 配列の、次に示す 角括弧内のインデックス。 ここで、私はそれぞれに値を代入しています 私はすべてで行うのと同じように要素、 他の文字列変数。 だから我々のコマンドライン引数にアクセスするには、 私たちがしなければならないすべてはアクセスです argv配列の右側の要素。 ユーザーは、。/打ち上げチームを入力した場合 端子にロケット、argvは0だろう 。/打ち上げである。 ARGVはチームとなり arg2にはロケットでしょう。 今、我々は我々のキーにアクセスできることを、 我々はまだ確認する必要があり それが正しいことを確認してください。 我々は、整数に変換する必要があります。 しかし、我々は同じようにキャストすることはできません 我々は以前にやった。 幸いにも、へY機能が面倒を見る 私たちのためにこれを、さらには0を返します 文字列は、変換できない場合 整数に変換します。 それは伝えるために、しかし、あなた次第です ユーザーは、なぜあなたはしません プログラムを続行することができます。 でYにした結果を格納する 整数、あなたのキーをそこに持っています。 次の部分は簡単です。 、彼らのプレーンテキストの入力をユーザーに促す どのデータ型の文字列になります。 幸いにも私たちのために、すべてのユーザーが入力した 文字列は有効です。 今、我々は必要なすべての入力を持っていること ユーザから、それは私たちにとっての時間だ 彼らのメッセージを暗号化。 シーザーの概念は単純です 理解するには十分。 しかし、どのようにコンピュータが知っている 手紙は、互いの後に来る? ASCIIテーブルは出番ここだ すべての文字は、整数を持つ それに関連付けられた番号。 資本金65です。 キャピタル·Bは66です。 97で小文字。 小文字のbが98である。 しかし、文字が限定されるものではない ただアルファベット番号へ。 たとえば、@記号 ASCII番号64です。 文字列全体を扱う前に、 我々は単にシフトしなければならないふりをみましょう 一文字。 さて、私たちは、実際のシフトさせたい プレーンテキストの文字ではなく、 文字や数字。 我々はしたいと思うように最初に チェックは、文字が入っているかどうかです アルファベット。 関数isalphaはがためにこれを行います 私たちとブール値を返します - 文字であればtrueが、文字です そうでない場合はfalse。 他の二つの便利な機能があります isupperはとislowerは、と 自明の名前。 彼らは与えられた文字あればtrueを返す 、大文字または小文字である それぞれ。 それらはブール値であるので、それらは同じく 条件として使用すると便利。 isalphaはがtrueを返した場合は、次のものが必要でしょう キーでその文字をシフトする。 それでは、ASCIIMathに開いてみましょう といくつかのASCII数学を行う。 usage使用法と非常によく似ています シーザー用とでキーに取り コマンドライン。 私はASCIIMath 5を実行する場合は、追加するようだ 5に、私に手紙fを与え、 ASCII値が表示されます。 それでは、プログラムを見てみましょう。 あなたは正しいここで、なぜ、疑問に思うかもしれません それは時の手紙は、整数です 明らかに、まあ、手紙。 それは、その文字が判明し、 整数では互換性があります。 単一の文字を入れて 整数が格納できる引用符、 資本のASCII値 A.は、しかし、注意してください。 単一の服が必要です。 単一引用符は必要ありません、 コンパイラは、変数を探します キャラクターの名前ではなく、。 それから私は、保存、文字とキーを追加 int型の変数に結果の合計。 その結果、データ型であるにもかかわらず 整数、私のprintf文では使用してい 文字の%Cプレースホルダ。 だから、プログラムは文字を出力 整数の結果に関連付けられている。 そして、私たちは整数を印刷以来 形だけでなく、%dを使用して、我々が表示さ 数字だけでなく、。 だから今、あなたは見ることができ、私たち 文字を治療し、 整数、逆もまた同様である。 ASCIIMathいくつかをテストしてみましょう キーとして25を使用して複数回。 私たちは、文字Zを得る。 今我々は26を試してみてください。 私たちは、文字を取得したいが、 代わりに、我々は左のブラケットを得る。 だから明らかに、単に追加 手紙への鍵はしないだろう。 私たちは、ラップする計算式を把握する必要があり アルファベットの周りに、私たちのような 最初の例ではなかった。 シーザーのための式 シフトは次のとおりです。 Cは、pプラスKモジュロ26に等しい。 モジュロが有用であることを忘れないでください 私たちの余りを与える操作 他ずつ数を割った。 平野には、この計算式を適用してみましょう 2のキーを使用してテキスト文字。 yのASCII値は、89である モジュロ26は、私たちに91を与え それは13に等しい - 間違いではないASCII値 、その67ですの。 今私をユーモアとから離れる アルファベット順のインデックスにASCII値 ゼロであり、Zは、25である Yは24であることを意味する。 24プラス2、モジュロ6は、私達に26を与え あるモジュロ26、0、 のアルファベット順のインデックス。 したがって、この式では、に適用されるように見える アルファベットの文字のインデックスと はなく、そのASCII値。 しかし、あなたはASCII値で始まります。 と暗号文の文字を印刷するには、 あなたにもそのASCII値が必要になります。 それは把握し、その後、あなた次第です 前後に切り替える方法。 たら、右の式を見つけ出す あなたがする必要がある一つの文字のために、すべての 毎に同じ計算式を適用している プレーンテキストの文字 - その文字はアルファベットである場合にのみ、 もちろん。 そして、あなたが保持する必要があることを覚えておいてください 大文字または小文字、、だ isupperはとislowerは機能 言及は、以前の便利になるだろう。 あなたは、2つの式があるかもしれない - 大文字のために1 と小文字のために1。 だからislowerは、あなたを助けるisupperは 適用する式を決定します。 どのようにすべてのへの式を適用しない 文字列内の単一の文字? さて、文字列だけである 文字の配列。 だから、それぞれの文字にすることによってアクセスすることができます 内のすべての文字の上にグループ化 forループ内の文字列。 ループについては、の条件については、 文字列用の関数strlenは、 長さは、便利になるだろう。 それは、入力として文字列を取り込み、 その文字列の長さを返します。 右のライブラリが含まれていることを確認してください 文字列の長さの関数を使用する。 そして、あなたはあなたの暗号文をそこに持っています。 私の名前はZamylaです。 と[話すCODE]。