题目太长,这里就不再描述了qwq,呸,还是懒
题目链接:L1-064 估值一亿的AI核心代码
思路就是按空格分割字符串,然后再进行题目中要求的操作即可。
若用文中的stringstream流的操作,巧妙的避开了删除空格的操作。
重要的函数 isalnum 若非字母和数字,则返回0;
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
getchar();
string t;
vector<string> v;
while(n--){
v.clear();
getline(cin,t);
cout << t << endl <<"AI:";//一定要输出原字符串
for(int i=0;i<t.size();i++){
if(isalnum(t[i])){
if(t[i]!='I') t[i]=tolower(t[i]);
}
else{
t.insert(i," ");//由于标点符号前不能有空格的原因,在标点前插入一个空格,利于下面流的操作。
i++;
}
if(t[i]=='?') t[i]='!';
}
stringstream s(t);
while(s>>t) v.push_back(t);//将字符串按空格分割
if(!isalnum(v[0][0])) cout << " ";//若开头是标点,输出空格。
for(int i=0;i<v.size();i++){
if(!isalnum(v[i][0])) cout << v[i];//若是标点符号,不输出空格。
else if(v[i]=="I" || v[i]=="me") cout<<" " << "you";
else if((v[i]=="can" || v[i]=="could")&&v[i+1]=="you"){
cout <<" I " << v[i];
i++;
}
else cout << " " << v[i];
}
cout << endl;
}
}