天梯赛 L1-064 估值一亿的AI核心代码 (20分) 字符串模拟

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;
}

猜你喜欢

转载自www.cnblogs.com/zzh1582188532/p/12367908.html