https://pintia.cn/problem-sets/994805046380707840/problems/1111914599412858885
代码如下:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<string>
#include<string.h>
#include<map>
#include<vector>
#define MAX 300005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n;
string s;
int ok[1005];
int main(){
cin>>n;
getchar();
for(int i=0;i<n;i++){
memset(ok,0,sizeof(ok));
getline(cin,s);
cout<<s<<endl;
string str="";
int len=s.length();
for(int j=len-1;j>=0;j--){
if(s[j]==' ') continue;
else{
len=j;
break;
}
}
bool flag1=false;//flag1=true说明当前的是标点符号
bool flag2=false;//flag2=true说明当前的是字符
for(int j=len;j>=0;j--){
if(s[j]!='I'&&s[j]>='A'&&s[j]<='Z'){
s[j]=tolower(s[j]);
}
if(s[j]=='I'||s[j]>='a'&&s[j]<='z'||s[j]>='0'&&s[j]<='9'){
str=s[j]+str;
flag2=true;
flag1=false;
}
if(flag1&&s[j]==' ') continue;
if(flag2&&s[j]==' '){
str=s[j]+str;
flag2=false;
}
if(s[j]!='I'&&s[j]!=' '&&(s[j]<'0'||s[j]>'9')&&(s[j]<'a'||s[j]>'z')){//说明是标点
if(s[j]=='?') s[j]='!';
flag1=true;
str=s[j]+str;
}
}
len=str.length()-1;
int pos=0,tmp=0;
for(int j=0;j<=len;j++){
if(str[j]!=' '){
pos=tmp=j;
break;
}
}
int start,ends;
while((start=str.find("can you",pos))!=str.npos){
ends=start+7;
if(start==0&&ends<len){
if(str[ends]!='I'&&(str[ends]<'a'||str[ends]>'z')&&(str[ends]<'0'||str[ends]>'9')){
str[start]='I',str[start+1]=' ',str[start+2]='c';
str[start+3]='a',str[start+4]='n';
ok[start+5]=ok[start+6]=1;
ok[start]=3;
}
}else if(start!=0&&ends>=len){
if(str[start-1]!='I'&&(str[start-1]<'a'||str[start-1]>'z')&&(str[start-1]<'0'||str[start-1]>'9')){
str[start]='I',str[start+1]=' ',str[start+2]='c';
str[start+3]='a',str[start+4]='n';
ok[start+5]=ok[start+6]=1;
ok[start]=3;
}
}else if(start!=0&&ends<len){
if((str[start-1]!='I'&&(str[start-1]<'a'||str[start-1]>'z')&&(str[start-1]<'0'||str[start-1]>'9'))&&(str[ends]!='I'&&(str[ends]<'a'||str[ends]>'z')&&(str[ends]<'0'||str[ends]>'9'))){
str[start]='I',str[start+1]=' ',str[start+2]='c';
str[start+3]='a',str[start+4]='n';
ok[start+5]=ok[start+6]=1;
ok[start]=3;
}
}else if(start==0&&ends>=len){
str[start]='I',str[start+1]=' ',str[start+2]='c';
str[start+3]='a',str[start+4]='n';
ok[start+5]=ok[start+6]=1;
ok[start]=3;
}
pos=ends;
}
pos=tmp;
while((start=str.find("could you",pos))!=str.npos){
ends=start+9;
if(start==0&&ends<len){
if(str[ends]!='I'&&(str[ends]<'a'||str[ends]>'z')&&(str[ends]<'0'||str[ends]>'9')){
str[start]='I',str[start+1]=' ',str[start+2]='c';
str[start+3]='o',str[start+4]='u',str[start+5]='l',str[start+6]='d',
ok[start+7]=ok[start+8]=1;
ok[start]=3;
}
}else if(start!=0&&ends>=len){
if(str[start-1]!='I'&&(str[start-1]<'a'||str[start-1]>'z')&&(str[start-1]<'0'||str[start-1]>'9')){
str[start]='I',str[start+1]=' ',str[start+2]='c';
str[start+3]='o',str[start+4]='u',str[start+5]='l',str[start+6]='d',
ok[start+7]=ok[start+8]=1;
ok[start]=3;
}
}else if(start!=0&&ends<len){
if((str[start-1]!='I'&&(str[start-1]<'a'||str[start-1]>'z')&&(str[start-1]<'0'||str[start-1]>'9'))&&(str[ends]!='I'&&(str[ends]<'a'||str[ends]>'z')&&(str[ends]<'0'||str[ends]>'9'))){
str[start]='I',str[start+1]=' ',str[start+2]='c';
str[start+3]='o',str[start+4]='u',str[start+5]='l',str[start+6]='d',
ok[start+7]=ok[start+8]=1;
ok[start]=3;
}
}else if(start==0&&ends>=len){
str[start]='I',str[start+1]=' ',str[start+2]='c';
str[start+3]='o',str[start+4]='u',str[start+5]='l',str[start+6]='d',
ok[start+7]=ok[start+8]=1;
ok[start]=3;
}
pos=ends;
}
pos=tmp;
while((start=str.find("I",pos))!=str.npos){
ends=start+1;
if(start==0&&ends<len&&ok[start]!=3){
if(str[ends]!='I'&&(str[ends]<'a'||str[ends]>'z')&&(str[ends]<'0'||str[ends]>'9')&&ok[start]!=3){
ok[start]=2;
}
}
if(start!=0&&start+1>=len){
if(str[start-1]!='I'&&(str[start-1]<'a'||str[start-1]>'z')&&(str[start-1]<'0'||str[start-1]>'9')&&ok[start]!=3){
ok[start]=2;
}
}
if(start!=0&&start+1<len){
if((str[start-1]!='I'&&(str[start-1]<'a'||str[start-1]>'z')&&(str[start-1]<'0'||str[start-1]>'9'))&&(str[ends]!='I'&&(str[ends]<'a'||str[ends]>'z')&&(str[ends]<'0'||str[ends]>'9'))&&ok[start]!=3){
ok[start]=2;
}
}else if(start==0&&ends>=len){
ok[start]=2;
}
pos=start+1;
}
pos=tmp;
while((start=str.find("me",pos))!=str.npos){
ends=start+2;
if(start==0&&ends<len){
if(str[ends]!='I'&&(str[ends]<'a'||str[ends]>'z')&&(str[ends]<'0'||str[ends]>'9')){
ok[start]=4;
}
}
if(start!=0&&ends>=len){
if(str[start-1]!='I'&&(str[start-1]<'a'||str[start-1]>'z')&&(str[start-1]<'0'||str[start-1]>'9')){
ok[start]=4;
}
}
if(start!=0&&ends<len){
if((str[start-1]!='I'&&(str[start-1]<'a'||str[start-1]>'z')&&(str[start-1]<'0'||str[start-1]>'9'))&&(str[ends]!='I'&&(str[ends]<'a'||str[ends]>'z')&&(str[ends]<'0'||str[ends]>'9'))){
ok[start]=4;
}
}else if(start==0&&ends>=len){
ok[start]=4;
}
pos=ends;
}
cout<<"AI: ";
if(len==0){
cout<<endl;
continue;
}
for(int j=tmp;j<=len;j++){
if(ok[j]==0||ok[j]==3){
cout<<str[j];
}else if(ok[j]==2){
cout<<"you";
}else if(ok[j]==4){
cout<<"you";
j++;
}
}
cout<<endl;
}
return 0;
}