赞
踩
- //字符串
-
- //PTA 天梯 L1-064 估值一亿的AI核心代码
-
- //无论用户说什么,首先把对方说的话在一行中原样打印出来;
- //-直接输出 cout
- //消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
- //-两个循环 去首尾空格,【i,j】 判断空格符 留一个 若后一个为符号 则覆盖空格符
- //把原文中所有大写英文字母变成小写,除了 I;
- //-判断是否为大写字母(除I) str[i]+32;
- //把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;
- //-独立! 判断前后是否为空或者符号 i=0判断后一位为空或者符号 i=le判断前一位为空或者符号 中间判断前后是否为空或符号
- //-作一个check() 来判断
- /*
- bool check(int x,int y,int len) //x为判断单词前一位 y为单词后一位 len为字符串的长度
- if((x<0||str[x]==' '||ispunct(str[x]))&&(y>=len&&str[y]==' '||ispunct(str[y])))
- return true;
- return false;
- */
- //把原文中所有独立的 I 和 me 换成 you;
- //-独立! 判断前后是否为空或者符号 i=0判断后一位为空或者符号 i=le判断前一位为空或者符号 中间判断前后是否为空或符号
- //把原文中所有的问号 ? 换成惊叹号 !;
- //-判断是否为? 替换为! if() str[i]='!';
- //在一行中输出替换后的句子作为 AI 的回答。
- //-cout<<"AI: ";
-
- //采用存放输出的形式 存放修改的字符串在goal中
- #include<iostream>
- #include<algorithm>
- #include<cctype>
- using namespace std;
- string str;
- bool check(int x,int y,int len) //x为判断单词前一位 y为单词后一位 len为字符串的长度
- {
- if((x<0||str[x]==' '||ispunct(str[x]))&&(y>=len||str[y]==' '||ispunct(str[y])))
- return true;
- return false;
- }
- int main()
- {
- int T;cin>>T;
- getchar();
- while(T--)
- {
- getline(cin,str);
- //输出原话
- cout<<str<<endl;
- int i=0,j=str.length()-1;
- //去掉首、尾空格
- while(str[i]==' ') i++;
- while(str[j]==' ') j--;
- //对str字符串进行规整化
- int cot=0;
- for(;i<=j;i++,cot++)
- {
- if(isupper(str[i])&&str[i]!='I') //大写非I
- str[cot]=str[i]+32;//转小写 +32
- else if(str[i]=='?')//修改?为!
- str[cot]='!';
- else if(str[i]==' ')//去多余的空格
- {
- str[cot]=' ';
- while(str[++i]==' ');//判断下一个是否为空格
- if(ispunct(str[i]))//若为符号 覆盖空格
- cot--;
- i--;
- }
- else//不修改
- str[cot]=str[i];
- }
- string goal="";
- for(int i=0;i<cot;i++)
- {
- if(str[i]=='I'&&check(i-1,i+1,cot))
- goal+="you";
- else if(str.substr(i,2)=="me"&&check(i-1,i+2,cot))
- goal+="you",i+=1;
- else if(str.substr(i,7)=="can you"&&check(i-1,i+7,cot))
- goal+="I can",i+=6;
- else if(str.substr(i,9)=="could you"&&check(i-1,i+9,cot))
- goal+="I could",i+=8;
- else
- goal+=str[i];
- }
- //输出AI的话
- goal="AI: "+goal;
- cout<<goal<<endl;
- }
- return 0;
- }
- /* 反思:
- 刚摸到这个题目的时候,感觉不是很难的啊,然后就埋头写了起来,写着写着发现情况越来越多,需要考虑的东西也越来越多
- 并没有一个很好的解决思路,在模棱两可、充满不确定的情况下写程序,最终的结果也能看出来!失败失败 lose
- 写到最后,也选择了放弃,最主要的原因就是,思路太乱,情况太多,考虑不全,程序的容错性太差
-
- 总结:本题 我感觉是字符串
- 对于这类题目(文字很多,要求很多) 细节很重要,一个细节不注意 可能就是不断的查 不断的查 最后也不一定能做出来
- 最好的办法就是,在写之前拟一条完整的思路,在满足容错性的情况下 再展开去写程序
- 记住!当代码重复出现的时候 去多写一个函数来减少冗余代码 增添可读性
-
- 这道题目也让我对字符串的使用有了一个深入的认识
- */

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。