私は16歳で、男子学生です。 少し前まで、ボットを書くというアイデアに出会いました...いや、PHPの部分ではなく、不必要なサイトにぶら下がっています。 また、「!天気」などのフレーズに対する無駄な応答者でもありません。
ボットは、デスクトップ上の「話し手」としてエンターテイメントのために考案されました。 ひどいですね しかし、自分のコードを誰にも見せたことはなく、学校のパスカルしか教えていないので、自分の間違いを知りたいです。 そのため、一部の人々が嫌いなクリーンな構造的アプローチに従って、C ++でオリジナルバージョンを作成しました。
アイデアはこれです。
ボットはコンソールからフレーズを取得し、単語を分離し、「Memory.txt」ファイルにある辞書に従ってそれぞれを確認し、見つかった回答を各単語に返します。 単一の単語に対する答えが見つからない場合、合意されたフレーズを返します(基本的にではありません)。
「Memory.txt」ファイルの辞書は、最も単純な方法で構成されています。
単語=答え
例:
りんご=おいしいりんご
Bot.hはヘッダーファイルです。これについては後で説明します。 主な機能は、Bot.cppファイルにあります。
#include"Bot.h"
同じファイルで辞書の名前を定義します。
ボットの「基本」は、1行から単語を抽出して文字列の配列に入れ、配列へのポインターを返す関数です。
const std :: string * const GetWords(const std :: string&Word) 次の関数は検索文字列を受け取り、辞書で検索します;答えが見つからない場合、空の文字列 ""を返します。 関連付けファイル内の別の単語の中に単語が見つかった場合、回答がカウントされるという事実に注意を喚起したいと思います。
const std :: string GetAssociation(const std :: string&Word) これで、オプションのささいなこと、ひどいトレーニングのパロディを考えることができます-「-」文字が行にあるときに新しい関連付けを追加します。
例:
悪は逆に良い
辞書が行く:
悪=良い逆
単語が別の単語の中にあるとき、答えがカウントされることを忘れないでください。その結果、興味深い結果が得られます。
void PutAssociation(const std :: string&Left、const std :: string&Right) 私の見解では、構造的なアプローチはカプセル化をキャンセルしないため、匿名の名前空間を追加します-これまでのすべての機能を含む一般的なカプセル化のために。
したがって、ヘッダーファイル「Bot.h」が含まれている場合、以前の関数は使用できなくなります。 達人を参照させてください:
これは、静的バインディングを使用して関数と変数を宣言することを避けるための最も先進的な方法です。
ユニット内でのみアクセスできます
翻訳(つまり、予備処理後に受信したファイル内)、
静的変数と同じ方法で、それらが配置されています。
スティーブンS.ダーチェスト、C ++。 神聖な知識
ここで、すべて一緒に:
そして最後に、もちろん、名前空間の外で、同じコンパイル単位で、外の世界と通信するための関数。 フレーズを取り、単語を分離し、それぞれの関連を取得し、キャラクターを見つけると、以前の機能を使用して同様に新しい関連を追加します。
const std :: string GetFullAssociation(const std :: string&Word) 要約すると、「Bot.cpp」ファイルは完全に次のとおりです。
これですべて「Bot.cpp」ファイルが完了し、ヘッダーファイル「Bot.h」の概要がすぐにわかります。
メイン部分はこれで完了です。メイン()関数が少しです。 Cbot.cppファイルに配置します。 Cbot-信じられないほど独創的ですね。
Cbot.cpp #include"Bot.h" int main() {
ボットの準備が整ったので、まとめてCbot.exeを取得し
、OEM 866エンコーディングでMemory.txtファイルを保存し、プログラムによって1つのディレクトリに配置します。 アセンブリへのリンク:
space.ru/files/?r=main /
view&Read=58688510私は、コードの明らかなエラーを示す批判の建設的な流れを期待しています。