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


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

    以上图片来自新浪微博。

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

    无论用户说什么,首先把对方说的话在一行中原样打印出来;
    消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
    把原文中所有大写英文字母变成小写,除了 I
    把原文中所有独立的 can youcould you 对应地换成 I canI could—— 这里“独立”是指被空格或标点符号分隔开的单词;
    把原文中所有独立的 Ime 换成 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
    

    如果输入的全是空格,回复是 AI: 后面要有一个空格哦。先分隔成单词直接在输出的时候替换,比在字符串里面删除要替换的再把字符串加进去要更容易操作。

    C 语言 ANS:

    #include <stdio.h>
    #include <stdbool.h>
    #include <string.h>
    #include <ctype.h>
    
    #define MAXLEN 10001
    
    int main(void)
    {
        char original[MAXLEN] = {0}, newstr[MAXLEN] = {0};
        int nowpos, newpos;
    
        while (fgets(original, sizeof(original), stdin)) {
            if (isdigit(original[0]))
                continue;
            nowpos = newpos = 0;
            // 分隔出独立的单词
            while (original[nowpos] != '') {
                char c = original[nowpos++];
                if (isalnum(c)) {
                    newstr[newpos++] = c;
                } else if (isspace(c)) {
                    newstr[newpos++] = c;
                    while (original[nowpos] == ' ') nowpos++;
                } else {
                    newstr[newpos++] = ' ';
                    newstr[newpos++] = c;
                }
            }
            newstr[newpos-1] = '';
            // 大小写转换 问号变为惊叹号
            for (newpos = 0; newstr[newpos] != ''; newpos++)
                if (newstr[newpos] != 'I')
                    newstr[newpos] = newstr[newpos] == '?' ? '!' : tolower(newstr[newpos]);
            
            char *words[MAXLEN] = {NULL};
            char *p = strtok(newstr, " ");
            int idx;
            for (idx = 0; p != NULL; idx++) {
                words[idx] = p;
                p = strtok(NULL, " ");
            }
            printf("%s", original);
            printf("AI:");
            if ((idx > 0 && !isalnum(words[0][0])) || idx == 0) {
                printf(" ");
            }
            for (int i = 0; i < idx; i++) {
                if (!isalnum(words[i][0])) {
                    printf("%s", words[i]);
                } else if (i + 1 < idx && strcmp(words[i], "can") == 0 && strcmp(words[i+1], "you") == 0) {
                    printf(" I can");
                    i++;
                } else if (i + 1 < idx && strcmp(words[i], "could") == 0 && strcmp(words[i+1], "you") == 0) {
                    printf(" I could");
                    i++;
                } else if (strcmp(words[i], "I") == 0 || strcmp(words[i], "me") == 0) {
                    printf(" you");
                } else {
                    printf(" %s", words[i]);
                }
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    聊天的时间显示
    Android下Affinities和Task
    android Notification 的使用
    Android Notification使用及取消
    类似微信发图片的样式
    Delphi---TServerSocket和TClientSocket发送和接收大数据包
    使用拷贝文件测试(BufferedInputStream,FileInputStream)
    android-getTextSize返回值是以像素(px)为单位的,setTextSize()以sp为单位
    怎样成为PHP 方向的一个合格的架构师
    mac 查看某个文件夹下所有隐藏文件(夹)的大小
  • 原文地址:https://www.cnblogs.com/fnmain/p/12348915.html
Copyright © 2020-2023  润新知