估值为一亿的AI核心代码

本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
无论用户说什么,首先把对方说的话在一行中原样打印出来;
消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
把原文中所有大写英文字母变成小写,除了 I;
把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;
把原文中所有独立的 I 和 me 换成 you;
把原文中所有的问号 ? 换成惊叹号 !;
在一行中输出替换后的句子作为 AI 的回答。
 
输入格式:输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。
输出格式:按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。
输入样例:
6
Hello ?
Good to chat   with you
can   you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know
 
输出样例:
Hello ?
AI: hello!
Good to chat   with you
AI: good to chat with you
can   you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don't know
 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 char b[1005];
 5 int judge(int x)
 6 {
 7     return !((b[x]>='A' && b[x]<='Z') || (b[x]>='a' && b[x]<='z') || (b[x]>='0' && b[x]<='9'));
 8 }
 9 
10 
11 int main(void)
12 {
13     int i,j;
14     int n,c;
15     char a[1005];
16     
17     scanf("%d",&n);
18     getchar();
19     
20     while(n--)
21     {
22         gets(a);
23         puts(a);
24         printf("AI: ");
25         c = i = 0;
26         
27         for(i=0; a[i]; i++)
28         {
29             if(a[i] == ' ')   //把所有空格窦归为一个 
30             {
31                 while(a[i] == ' ')
32                 {
33                     i++;
34                 }
35                 b[c++] = ' ';
36                 i--;
37             }
38             else if(a[i] == '?')
39             {
40                 b[c++] = '!';
41             }
42             else if(a[i]>='A' && a[i]<='Z' && a[i]!='I')
43             {
44                 b[c++] = a[i]+32;
45             }
46             else
47             {
48                 b[c++] = a[i];
49             }
50         }
51         
52         for(i=0; i<c; i++)   //strstr返回的是地址! 
53         {
54             if(i==0 && b[i]==' ') continue;
55             if((i==0 || judge(i-1)) && strstr(b+i,"could you")==&b[i] && (i+9==c || judge(i+9))) //i使用来检查是否在首尾独立 
56             {                                                                                    //judge检查是否在句中独立 
57                 printf("I could");
58                 i+=8;
59             }
60             else if((i==0 || judge(i-1)) && strstr(b+i,"can you")==&b[i] && (i+7==c || judge(i+7)))
61             {
62                 printf("I can");
63                 i+=6; 
64             } 
65             else if((i==0 || judge(i-1)) && b[i]=='m' && b[i+1]=='e' && (i+2==c || judge(i+2)))
66             {
67                 printf("you");
68                 i++;
69             }
70             else if((i==0 || judge(i-1)) && b[i]=='I' && (i+1==c || judge(i+1)))
71             {
72                 printf("you");
73             }
74             else if(b[i]==' ')
75             {
76                 if(i==c-1)  continue;  //结尾空格 
77                 if(!judge(i+1))//如果空格后一个是数字或者字母 直接过滤掉标点 
78                 {
79                     printf(" ");
80                 }
81             }
82             else 
83             {
84                 printf("%c",b[i]);
85             }
86         }
87         printf("\n");
88     }
89     
90     return 0;
91 }

 

posted @ 2020-03-14 12:11  Xxaj5  阅读(434)  评论(0编辑  收藏  举报