zoukankan      html  css  js  c++  java
  • L1-8 估值一亿的AI核心代码

    在家写了写2019年天梯赛的题,被这一道字符串题弄得心态爆炸,自己写了个纯模拟只得了13分,也不想调试了,就去网上看了一下各路大佬写的代码。

    我只是个大佬博客的搬运工~

    先上题目:

     

     在看各路大佬得解题方法时,发现了个处理字符串问题的好东西,那就是正则表达式,但是有些比赛不支持。

    关于正则表达式的介绍,可以看这位大佬的博客:

    https://blog.csdn.net/weixin_42449444/article/details/89022191

    解题方法看的是这位大佬的博客:

    https://blog.csdn.net/xiji333/article/details/104494088

    然后自己敲了一遍,写了一些注释:

     1 #include<iostream>
     2 #include<regex>
     3 using namespace std;
     4 
     5 int main(){
     6     int n;
     7     cin>>n;
     8     getchar();//下面输入字符串的方式是getline,以换行符作为结尾,需要将n输入后的换行符先消耗 
     9     while(n--){
    10         string s;
    11         getline(cin,s);
    12         cout<<s<<endl;
    13         
    14         s=regex_replace(s,regex(" +")," ");//将多个空格用一个空格替换 
    15         if(s[0]==' ') s.erase(0,1);//若第一个字符是空格,就删除 
    16         if(s[s.size()-1]==' ') s.erase(s.size()-1,1);//若最后一个字符是空格,就删除 
    17         
    18         //删除标点符号前面的空格 
    19         s=regex_replace(s,regex(" \?"),"?");//?和.都是特殊字符,需要加上 
    20         s=regex_replace(s,regex(" \."),".");
    21         s=regex_replace(s,regex(" !"),"!");
    22         s=regex_replace(s,regex(" ,"),",");
    23         s=regex_replace(s,regex(" '"),"'");
    24         s=regex_replace(s,regex(" ;"),";");
    25         
    26         //将大写字母(除I)换成小写字母 
    27         for(int i=0;i<s.size();i++){
    28             if(s[i]>='A' && s[i]<='Z' && s[i]!='I') s[i]=s[i]+'a'-'A';
    29         }
    30         
    31         //这里先换成_I 是因为下面还有将单独的I换成you的命令,这里整体换的地方需要做个标记,下面不用做替换 
    32         s=regex_replace(s,regex("\bcan you\b"),"_I can"); 
    33         s=regex_replace(s,regex("\bcould you\b"),"_I could");
    34         
    35         s=regex_replace(s,regex("\bI\b"),"you");
    36         s=regex_replace(s,regex("\bme\b"),"you");
    37         s=regex_replace(s,regex("_I\b"),"I");//将上面整体替换的标记部分还原 
    38         
    39         s=regex_replace(s,regex("\?"),"!");
    40         
    41         cout<<"AI: "<<s<<endl;
    42     }
    43     
    44     return 0;
    45 } 

    其中,用到了一个转义字符,是用来匹配字母或数字边界,w是字母数字。关于的解释可以参考这位大佬的博客:

    https://www.cnblogs.com/tnt-33/p/10676473.html

    不用正则表达式的做法可以参考这个大佬的博客:

    https://blog.csdn.net/qq_41829380/article/details/88919000

    我只是个大佬们博客的搬运工~(整理一下,方便自己以后看嘻嘻)

  • 相关阅读:
    基于Ubuntu Jeos打造自己的精简版Linux服务器
    35 vs 53怎么裁
    父母在,不远游
    linux deepin是基于linux mint修改
    novell
    Sahi
    virtualbox on windows store vdi on ndfs due the file will bigger than 4gb
    在Linux下配置邮件系统
    CSS3 backgroundsize 属性
    dede:list及dede:arclist 按权重排序的方法
  • 原文地址:https://www.cnblogs.com/program-ai-cv-ml-se-fighting/p/12570966.html
Copyright © 2011-2022 走看看