zoukankan      html  css  js  c++  java
  • 字符串模拟

    L1-064 估值一亿的AI核心代码 (20 分)
     

    AI.jpg

    以上图片来自新浪微博。

    本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:

    • 无论用户说什么,首先把对方说的话在一行中原样打印出来;
    • 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
    • 把原文中所有大写英文字母变成小写,除了 I
    • 把原文中所有独立的 can youcould you 对应地换成 I canI could—— 这里“独立”是指被空格或标点符号分隔开的单词;
    • 把原文中所有独立的 I 和 me 换成 you
    • 把原文中所有的问号 ? 换成惊叹号 !
    • 在一行中输出替换后的句子作为 AI 的回答。

    输入格式:

    输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。

    输出格式:

    按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。

    输入样例:

    6
    Hello ?
     Good to chat   with you
    can   you speak Chinese?
    Really?
    Could you show me 5
    What Is this prime? I,don 't know
    

    输出样例:

    Hello ?
    AI: hello!
     Good to chat   with you
    AI: good to chat with you
    can   you speak Chinese?
    AI: I can speak chinese!
    Really?
    AI: really!
    Could you show me 5
    AI: I could show you 5
    What Is this prime? I,don 't know
    AI: what Is this prime! you,don't know



     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int  N = 1010;
     4 int main()
     5 {
     6     int n;
     7     string s;
     8     scanf("%d",&n);
     9     getchar();//不能省。 
    10     int cnt  ;
    11     while(n--){
    12         string str[N];//一定要定义在里面。 
    13         getline(cin,s);
    14         cout<<s<<endl;
    15         cout<<"AI:";
    16         for(int i =0;i<s.size();i++){
    17             if(isalnum(s[i])){
    18                 if(s[i]!='I'){
    19                     s[i]= tolower(s[i]);
    20                 }
    21             }
    22             else{
    23                 s.insert(i," ");//在空格或标点前加个空格,' '不行,一定要是" " 
    24                 i++;
    25             }
    26             if(s[i]=='?') s[i] = '!';
    27         }
    28         cnt  = 0;
    29         stringstream ss;
    30         ss<<s;
    31         while(ss>>s){
    32             str[cnt++] = s;//每个在原文中都以(一个或多个)空格分开的。 
    33         }
    34         if(!isalnum(str[0][0])){//因为下面是从第一个开始的,如果str[0][0]是标点
    35         //的话,必须先输出一个空格。因为按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。 
    36             printf(" ");
    37         }
    38         for(int i =0;i<cnt;i++){
    39             if(!isalnum(str[i][0])){//保证标点前无空格。 
    40             cout<<str[i];
    41         }
    42         //其他的一定要先输出一个空格就可以把相邻单词间的多个空格换成 1个空格 。 
    43         else if(str[i]=="can"&&str[i+1]=="you"){
    44             printf(" I can");
    45             i++;
    46         }
    47         else if(str[i]=="could"&&str[i+1]=="you"){
    48             printf(" I could");
    49             i++;
    50         }
    51         else if(str[i]=="I"||str[i]=="me"){//是原文中 
    52             printf(" you");
    53         }
    54         else{
    55         cout<<" "<<str[i];
    56         }
    57         }    
    58         printf("
    ");
    59     }    
    60     return 0;
    61 } 
    62 
    63     
  • 相关阅读:
    加分二叉树
    逃离牧场
    [Apio2012]dispatching
    靶形数独
    POJ 1459-Power Network(网络流-最大流-ISAP)C++
    题解 最优的挤奶方案(Optimal Milking)
    [HNOI2007]紧急疏散EVACUATE (湖南2007年省选)
    【LCA求最近公共祖先+vector构图】Distance Queries
    BZOJ1143: [CTSC2008]祭祀river
    BZOJ2140: 稳定婚姻
  • 原文地址:https://www.cnblogs.com/tingtin/p/10655384.html
Copyright © 2011-2022 走看看