当前位置:   article > 正文

【PTA-天梯赛】【 L1-064】【估值一亿的AI核心代码(20分)】_pta估值一亿的ai核心代码

pta估值一亿的ai核心代码
  1. //字符串 
  2. //PTA 天梯 L1-064 估值一亿的AI核心代码 
  3. //无论用户说什么,首先把对方说的话在一行中原样打印出来;
  4.   //-直接输出  cout 
  5. //消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
  6.   //-两个循环 去首尾空格,【i,j】     判断空格符  留一个 若后一个为符号  则覆盖空格符 
  7. //把原文中所有大写英文字母变成小写,除了 I;
  8.   //-判断是否为大写字母(除I)  str[i]+32; 
  9. //把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;
  10.   //-独立!   判断前后是否为空或者符号 i=0判断后一位为空或者符号        i=le判断前一位为空或者符号     中间判断前后是否为空或符号 
  11.   //-作一个check()  来判断 
  12.    /*
  13.            bool check(int x,int y,int len) //x为判断单词前一位   y为单词后一位   len为字符串的长度
  14.                if((x<0||str[x]==' '||ispunct(str[x]))&&(y>=len&&str[y]==' '||ispunct(str[y]))) 
  15.                    return true;
  16.                return false;
  17.    */
  18. //把原文中所有独立的 I 和 me 换成 you;
  19.   //-独立!   判断前后是否为空或者符号 i=0判断后一位为空或者符号        i=le判断前一位为空或者符号     中间判断前后是否为空或符号 
  20. //把原文中所有的问号 ? 换成惊叹号 !;
  21.   //-判断是否为?  替换为!  if()  str[i]='!'; 
  22. //在一行中输出替换后的句子作为 AI 的回答。
  23.   //-cout<<"AI: "; 
  24.   
  25. //采用存放输出的形式  存放修改的字符串在goal中 
  26. #include<iostream>
  27. #include<algorithm>
  28. #include<cctype>
  29. using namespace std;
  30. string str;
  31. bool check(int x,int y,int len) //x为判断单词前一位   y为单词后一位    len为字符串的长度 
  32.        {
  33.            if((x<0||str[x]==' '||ispunct(str[x]))&&(y>=len||str[y]==' '||ispunct(str[y]))) 
  34.                return true;
  35.            return false;     
  36.     }
  37. int main()
  38. {
  39.     int T;cin>>T;
  40.     getchar();
  41.     while(T--)
  42.     {
  43.         getline(cin,str);
  44.         //输出原话 
  45.         cout<<str<<endl;
  46.         int i=0,j=str.length()-1;
  47.         //去掉首、尾空格 
  48.         while(str[i]==' ') i++;
  49.         while(str[j]==' ') j--;
  50.         //对str字符串进行规整化 
  51.         int cot=0;
  52.         for(;i<=j;i++,cot++)
  53.         {
  54.             if(isupper(str[i])&&str[i]!='I')  //大写非I 
  55.                 str[cot]=str[i]+32;//转小写 +32
  56.             else if(str[i]=='?')//修改?为! 
  57.                 str[cot]='!';
  58.             else if(str[i]==' ')//去多余的空格 
  59.             {
  60.                 str[cot]=' ';
  61.                 while(str[++i]==' ');//判断下一个是否为空格 
  62.                 if(ispunct(str[i]))//若为符号   覆盖空格
  63.                     cot--;  
  64.                 i--;
  65.             }
  66.             else//不修改 
  67.                 str[cot]=str[i];
  68.         }
  69.         string goal="";
  70.         for(int i=0;i<cot;i++)
  71.         {
  72.             if(str[i]=='I'&&check(i-1,i+1,cot))
  73.                 goal+="you";
  74.             else if(str.substr(i,2)=="me"&&check(i-1,i+2,cot))
  75.                 goal+="you",i+=1;
  76.             else if(str.substr(i,7)=="can you"&&check(i-1,i+7,cot))
  77.                 goal+="I can",i+=6;
  78.             else if(str.substr(i,9)=="could you"&&check(i-1,i+9,cot))
  79.                 goal+="I could",i+=8;
  80.             else
  81.                 goal+=str[i]; 
  82.         }
  83.         //输出AI的话 
  84.         goal="AI: "+goal;
  85.         cout<<goal<<endl;
  86.      } 
  87.     return 0;
  88. }
  89. /*    反思: 
  90.     刚摸到这个题目的时候,感觉不是很难的啊,然后就埋头写了起来,写着写着发现情况越来越多,需要考虑的东西也越来越多
  91.     并没有一个很好的解决思路,在模棱两可、充满不确定的情况下写程序,最终的结果也能看出来!失败失败 lose
  92.     写到最后,也选择了放弃,最主要的原因就是,思路太乱,情况太多,考虑不全,程序的容错性太差
  93.     
  94.     总结:本题  我感觉是字符串
  95.     对于这类题目(文字很多,要求很多)  细节很重要,一个细节不注意 可能就是不断的查 不断的查 最后也不一定能做出来
  96.     最好的办法就是,在写之前拟一条完整的思路,在满足容错性的情况下  再展开去写程序
  97.     记住!当代码重复出现的时候  去多写一个函数来减少冗余代码  增添可读性 
  98.     
  99.     这道题目也让我对字符串的使用有了一个深入的认识 
  100. */


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/376694?site
推荐阅读
相关标签
  

闽ICP备14008679号