第四章学习小结

第四章学习了串和数组的相关内容,以及学习了BF算法和KMP算法。AI这道题好难啊 ,看懂一点点后面的又接不上。求我的神仙室友手把手教我写代码。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string.h>
using namespace std;
//1、删除空格(删除前后空格,删除中间连续的空格保留一个,删除符号后的空格
//后面的条件依靠空格标准化
bool isIndepent(char ch)
{
 ch = tolower(ch);
 if(ch>='0'&&ch<='9'||ch>='a'&&ch<='z'||ch=='I')
 {
  return false;
 }else
 return true;
}
bool isPunctuation(char ch)
{
 if(ch>='0'&&ch<='9'||ch>='a'&&ch<='z'||ch=='I'||ch==' ')
 return false;
 else
 return true;
}
void go(string s)
 {// 根据s输出AI的回答
  //定义辅助变量t,来copy s的字符串
  char t[3001];
  int i , j; //定义两个下表; i :定义到s的第一个非空; j : 定义t
 for(i = 0 ; s[i]!= '\0' && s[i] == ' ' ; i++);  //全为空格的时候会将s的最后一个字符‘\0’存储
    //保证每次往后扫一次用for,往后扫的次数要跳跃无规律用while
 j = 0;
 while(s[i] != '\0'){ //把s串copy到t,但是连续的空格只copy一次
  if(s[i] == ' ' && s[i-1] ==' ')//连续的空格第一个要,后面的都不要
  { //一个一个copy到t字符串同时判断
   i++;
   continue;
  }
  
  if(s[i] == '?')
  {
   t[j] = '!';
   j++;
   i++;
   continue; //回到循环开头
   }
  if( s[i] != 'I')
  {
   t[j] = tolower(s[i]);
   i++;
   j++;
   continue;
  }
     
  
    
     t[j] = s[i];
     i++;
     j++;
  
   //不能copy连续的空格 ,先读变量值,为下一轮循环做准备
  //此时t没有处理'\0' 后面读出字符串会出错
 }
 t[j] = '\0';//给t补上结尾符;
  
    j = 0 ;
    while(t[j]!='\0')
    {
     if(t[j]=='I'&&(j==0||isIndepent(t[j-1]))&&isIndepent(t[j+1]))
     {
      cout<<"you";
      j++;
      continue;
  }else
  if(t[j]=='m'&&t[j+1]=='e'&&(j==0||isIndepent(t[j-1]))&&isIndepent(t[j+2]))
  {
   cout<<"you";
   j += 2;
   continue;
  }else
  if(t[j]==' '&&isPunctuation(t[j+1]))
  {
   j++;
  }else
  if(t[j]=='c'&&t[j+1]=='a'&&t[j+2]=='n'&&t[j+3]==' '&&t[j+4]=='y'&&t[j+5]=='o'&&t[j+6]=='u'&&(j==0||isIndepent(t[j-1])&&isIndepent(t[j+7])))
     {
    cout<<"I can";
    j += 7;
  }
  else
  {
   cout<<t[j];
   j++;
   
  }
  
 }
 cout<<endl;
 }
 
//主函数
int main()
{
 int n;
 string s;
 cin >>n;
 getchar();// 吸收回车 《cstdio>
 for ( int i=0; i<n ; i++)
 {
  getline(cin , s);
  cout << s << endl ;
  cout << "AI: ";
  go(s); // 根据s输出AI的回答
 }
 
 return 0;
 }
 
posted @ 2019-04-14 23:00  Hycomin  阅读(137)  评论(1编辑  收藏  举报