- ベストアンサー
人工無能プログラムの改良方法について
- プログラムについての質問です。指定したキーワードに対して決められた返答をする人工無能プログラムの改良方法について教えてください。
- 下記のC言語プログラムは、指定したキーワードに対して「ふーん」という回答を返す人工無能です。しかし、特定のキーワードに対して特定の返答をするようにするためには、どのように改良すれば良いでしょうか?
- ソースコードを書いていただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これ、好きです(笑)。あとは言葉を好きな日本語に変えたり、付け加えたりしてください。「おまけ」ですが、答えを3種類使い分けてくれます。 /* A sample program by Mac OSX * file name: roo.c * compile: gcc roo.c * execution: ./a.out */ #include <stdio.h> #include <time.h> #define MAXLINE 128 #define LINE_NUM 3 // 追加の message[行]に合わせること struct set1 { char *keyword; char *reply[3]; } message[LINE_NUM] = { "", "??", "what?", "try again, please", "bye", "byebye", "so long", "see you again", "hello", "hello", "how are you?", "hi! hello." // ここに好きな言葉を書き込むこと }; int main(void) { char *temp, line[MAXLINE]; int i, j; srand(time(NULL)); while(1) { printf("Please you may. : "); temp = fgets(line,MAXLINE,stdin); while(*temp != '\n') temp++; *temp = '\0'; // 末尾 \n の抹消 j = rand() % 3; i = 0; while (strcmp(line, message[i].keyword) != 0 && i < LINE_NUM) i++; if (i == 1) { // bye printf("\t%s\n", message[1].reply[j]); break; } else if (i == LINE_NUM) // what? printf("\t%s\n", message[0].reply[j]); else // reply printf("\t%s\n", message[i].reply[j]); } return 0; }
その他の回答 (2)
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
#2です。strcmp()を使っているのにヘッダーファイル記述を抜かしていました m(_ _)m ↓を追加してください。 #include <string.h>
- kmee
- ベストアンサー率55% (1857/3366)
>while(fgets(line,MAXLINE,stdin)!=NULL){ でlineに入力した文字列が入っているので、lineとキーワードを比較してメッセージを選ぶようにします。 注意点としては次の2点 ・fgetsは改行文字(\n)も含んで入力する。 ・Cでの文字列比較はちょっと面倒くさい 例えば if ( line =="こんにちは" ) { printf("こんにちは 元気ですか?");} とした場合、2つの点で間違いです。 Cではchar型の配列を文字列と見なしますが、 ==や!=などで文字列の内容ではなく、char型の配列(=ポインタ)が等しいかどうかを比較します。上の場合では配列lineが指し示すアドレスと定数"こんにちは"が格納されているアドレスとの比較となり、常に等しくないでしょう。 文字列の内容の比較には strcmp 関数やそれと同等の処理を用います。 if ( strcmp( line, "こんにちは") == 0 ) { printf("こんにちは 元気ですか?");} そしてもう一つ。fgetsは改行文字まで一緒に取り込みますから、比較するなら、相手も改行文字が含まれていなければ一致しません if ( strcmp( line, "こんにちは\n") == 0 ) { printf("こんにちは 元気ですか?");} これを埋め込むとこんなかんじ #include<stdio.h> #include<string.h> /* strcmpのために必要 */ #define MAXLINE 256 int main() { char line[MAXLINE] ;//入力バッファ /*オープニングメッセージ*/ printf("taka:メッセージをどうぞ\n"); printf("自分:"); /*会話しましょう*/ while(fgets(line,MAXLINE,stdin)!=NULL){ if ( strcmp( line, "こんにちは\n") == 0 ) { printf("こんにちは 元気ですか?"); } else { printf("taka:ふ~ん?\n"); } printf("自分:"); } /*エンディングメッセージ*/ printf("taka:ばいば~い\n"); return 0 ; }