zoukankan      html  css  js  c++  java
  • L1-064 估值一亿的AI核心代码 (20 分)

    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


    ***注意,如果你也是卡在第二个测试点,可以测试 [can I can] -> [can you can] 和 [can you you] -> [I can you]***
    #include <bits/stdc++.h>
    using namespace std;
    
    string line, orign;
    
    
    bool is_fuhao(char c) {
        return (!isspace(c) && !isalpha(c) && !isdigit(c));
    }
    
    bool is_duli(int s, int t, int limit) {
    
        return (((s == 0) || isspace(line[s - 1]) || is_fuhao(line[s - 1]))
                    && ((t == limit) || isspace(line[t + 1]) || is_fuhao(line[t + 1])));
    }
    
    int find_duli(string s, int pos) {
        int idx;
        int len = line.length();
        while(pos < len && (idx = line.find(s, pos)) >= 0) {
            if(is_duli(idx, idx + s.length() - 1, len - 1))
                return idx;
            else
                pos += s.length();
        }
        return -1;
    }
    
    void replace_unit(string o, string t) {
        bool isUpdate = true;
        int pos = 0;
        while(pos < (int)line.length() && isUpdate) {
            isUpdate = false;
            int idx = find_duli(o, pos);
            if(idx >= 0) {
                line.replace(idx, o.length(), t);
                isUpdate = true;
                pos = idx + o.length();
            }
        }
    }
    
    void proc_replace() {
        replace_unit("I", "You");
        replace_unit("me", "You");
        replace_unit("can you", "I can");
        replace_unit("could you", "I could");
    }
    
    void del_blank() {
        bool isUpdate = true;
        while(isUpdate) {
            int len = line.length(), pos = 0;
            isUpdate = false;
            for(int i = pos; i < len; i++) {  // 结尾不会是空格,不会越界
                if(isspace(line[i]) && (isspace(line[i + 1]) || is_fuhao(line[i + 1]))) {
                    line.erase(i, 1);
                    pos = i;
                    isUpdate = true;
                    break;
                }
            }
        }
    }
    
    void to_lower_tanhao() {
    
        transform(line.begin(), line.end(), line.begin(), [](char c)->char {
                  if(c == '?') return '!';
                  else if(c == 'I') return 'I';
                  return tolower(c);
        });
    
    }
    
    void input_and_trim() {
    
        getline(cin, orign);
        line = orign;
    
        if(!line.empty()) {
            line.erase(0,line.find_first_not_of(" "));
            line.erase(line.find_last_not_of(" ") + 1);
        }
    
    }
    
    int main() {
    
        int n;
        cin >> n;
        getchar();
        while(n --) {
            input_and_trim();
            to_lower_tanhao();
            del_blank();
            proc_replace();
            to_lower_tanhao();
            cout << orign << endl;
            cout <<"AI: "<< line << endl;
        }
    
    }
     
  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/Pretty9/p/11440319.html
Copyright © 2011-2022 走看看