zoukankan      html  css  js  c++  java
  • pta(估值一亿的AI核心代码 (20point(s)))(STL)

    题意:

    思路:

      运用STL中的find、erase、replace方法还有string的迭代器模拟。注意的是规则3、4、5、6是对原文而言,而不是对上一步规则的结果而言。但在我的理解中,题意有点问题,根据样例可以发现规则4并不是在原文基础上实施的,而是在规则3的结果基础上实施的。

    AC code:

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    typedef string::iterator IT;
    int n;
    string s1,s2;
    char c;
    
    bool isBD(char c){
        if(c>='a'&&c<='z') return false;
        if(c>='A'&&c<='Z') return false;
        if(c>='0'&&c<='9') return false;
        if(c==' ') return false;
        return true;
    }
    
    bool check(int l,int r){
        int f1=0,f2=0;
        if(!l||s1[l-1]==' '||isBD(s1[l-1])) f1=1;
        if(r==s1.length()-1||s1[r+1]==' '||isBD(s1[r+1])) f2=1;
        return f1&&f2;
    }
    
    int main(){
        std::ios::sync_with_stdio(false);
        std::cin.tie(0);
        cin>>n;
        cin.get();
        while(n--){
            getline(cin,s1);
            cout<<s1<<endl;
    
            for(IT it=s1.begin();it!=s1.end();++it){
                if((*it)==' '){
                    IT it2=it;
                    it2++;
                    while(it2!=s1.end()&&(*it2)==' ')
                        s1.erase(it2);
                }
            }
            IT it=s1.begin();
            if((*it)==' ') s1.erase(it);
            it=s1.end();
            --it;
            if((*it)==' ') s1.erase(it);
            for(IT it=s1.begin();it!=s1.end();++it)
                if(isBD((*it))){
                    if(it==s1.begin()) continue;
                    IT it2=it;
                    --it2;
                    if((*it2)==' ') s1.erase(it2),it=it2;
                }
            
            for(IT it=s1.begin();it!=s1.end();++it)
                if((*it)>='A'&&(*it)<='Z'&&(*it)!='I')
                    (*it)=(*it)+'a'-'A';
            s2=s1;
    
            string f1="can you",r1="I can",rr1="xxxxx";
            int p=0;
            while(p<s1.length()&&(p=s1.find(f1,p))!=string::npos){
                if(check(p,p+7-1)){
                    s1=s1.replace(p,7,rr1);
                    s2=s2.replace(p,7,r1);
                    p+=5;
                }
                else{
                    p+=7;
                }
            }
            string f2="could you",r2="I could",rr2="xxxxxxx";
            p=0;
            while(p<s1.length()&&(p=s1.find(f2,p))!=string::npos){
                if(check(p,p+9-1)){
                    s1=s1.replace(p,9,rr2);
                    s2=s2.replace(p,9,r2);
                    p+=7;
                }
                else{
                    p+=9;
                }
            }
        
            string f3="I",r3="you",rr3="xxx";
            p=0;
            while(p<s1.length()&&(p=s1.find(f3,p))!=string::npos){
                if(check(p,p+1-1)){
                    s1=s1.replace(p,1,rr3);
                    s2=s2.replace(p,1,r3);
                    p+=3;
                }
                else{
                    p+=1;
                }
            }
        
            string f4="me",r4="you",rr4="xxx";
            p=0;
            while(p<s1.length()&&(p=s1.find(f4,p))!=string::npos){
                if(check(p,p+2-1)){
                    s1=s1.replace(p,2,rr4);
                    s2=s2.replace(p,2,r4);
                    p+=3;
                }
                else{
                    p+=2;
                }
            }
            
            for(IT it=s2.begin();it!=s2.end();++it)
                if((*it)=='?')
                    (*it)='!';
    
            cout<<"AI: "<<s2<<endl;
    
        }
        return 0;
    }
  • 相关阅读:
    153. Find Minimum in Rotated Sorted Array
    228. Summary Ranges
    665. Non-decreasing Array
    661. Image Smoother
    643. Maximum Average Subarray I
    4.7作业
    面向对象编程
    常用模块3
    3.31作业
    常用模块2
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/12541188.html
Copyright © 2011-2022 走看看