估值一个亿的AI核心代码(超容易理解的做法)

估值一个亿的AI核心代码(超容易理解的做法)

原题

在这里插入图片描述

解题思路

解题过程基本就是对输入的字符串轮流进行题目要求中的处理,删空格、转化大小写、替换字符等等。

难点易错点以及解决思路

个人认为最大的难点是字符替换中’I’和’you’的重复替换问题,但是其实解决起来还是简单的,我的办法是替换的时候先用大写You替换I,这样就避免了’you’可能再次被换。只需要在替换完之后再次转化大小写即可。

易错点主要是在替换过程中的条件判断,比如对" 独立的’can you’ "的理解,判断过程中可能会遇到数组越界以及逻辑不清楚判断不完整等问题,我的理解就是利用STL的find()来找到索引后开始判断边界字符,用isdigit()、isalpha()来判断是否为空格以及判断边界可能得出独立与否的结论。

c++参考代码

#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;

void upper2lower(string &s)//小写转化
{
    for(int i = 0;i <= s.size();i ++)
        if(s[i] >= 'A' && s[i] <= 'Z' && s[i] != 'I') s[i] -= 'A' - 'a';
}

void spacedelete(string &s)//删除多余空格
{
    while(s[0] == ' ') s.erase(0,1);//行首多余空格
    while(s[s.length() - 1] == ' ') s.erase(s.length()-1,1);//末尾多余空格
    for(int i = 1;i < s.length();i ++)
    {
        if(s[i] == ' ' && s[i - 1] == ' ')//空格不相连
            s.erase(-- i,1);
        else if(!isalpha(s[i]) && !isdigit(s[i]) && s[i] != ' ' && s[i - 1] == ' ')//符号前不留空格
            s.erase(-- i,1);
    }
}

void strchange(string &s,string pre,string rep)//字符替换
{
    int index = 0;
    do
    {
        index = s.find(pre,index);
        if(index == -1) break;
        if(index != 0 && (isalpha(s[index - 1]) || isdigit(s[index - 1])))
        {
            index ++;
            continue;
        }
        int right = index + pre.size();
        if(right < s.length() && (isalpha(s[right]) || isdigit(s[right])))
        {
            index ++;
            continue;
        }
        s.replace(index,pre.size(),rep);
    } while (index != -1);
}

void ans(string s)
{
    cout << s<< endl;
    spacedelete(s);//多余空格删除
    upper2lower(s);//大小写转化
    strchange(s,"I","You");
    strchange(s,"me","You");
    strchange(s,"can you","I can");
    strchange(s,"could you","I could");
    //字符替换
    for(int i = 0;i < s.length();i ++) s[i] = s[i] == '?'?'!':s[i];//?换!
    upper2lower(s);//大小写转化
    cout << "AI: " << s << endl;///输出回答
}

int main()
{
    int t;
    cin >> t;
    getchar();
    while(t --)
    {
        string ask;
        getline(cin,ask);
        ans(ask);
    }
    return 0;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
欢迎体验AI1.0 1 ------------ 运行本软件需要JRE(java运行时)1.5.0_08以上版本。 运行方法:在program目录下,右键点击AI10.jar,选打开方式为“java platform standard edition binary”即可。 2 ------------ 界面介绍: 界面左侧是一个树(load数据后显示树结构),右侧上方是您在树上点选的节点的信息的显示与编辑区,右侧中间是命令的输入区,右侧下方是输出区。 您会发现界面上有很多按钮,其实他们都是我调试程序用的,您只需了解几个按钮即可。 File菜单的“Set default dir”是设置选择载入、导出文件的默认目录, “save as”是将树保存为文件,“load”则是将文件中保存的树装入到程序中来(会覆盖原有树的呦~~,记得先save)。 Script菜单的“save script as”是将命令区的内容存入文件,“load script”是将文件读入命令区(覆盖原有的命令)。 右侧中部的“Execute”按钮可以执行命令区的命令,可以用鼠标选择一部分命令为高亮,而只执行选择的命令。 ***注意***需要人工将右下的输出区的滚动条滚到最下!(作者在此道歉了,但作者毕竟是技艺不精啊……) 右侧中部的“CLO”是清除输出区的按钮,“—”则是在输出区加横线的按钮。 3 ------------ 功能介绍: ***注意***使用前需LOAD目录import_me下的template.dat。(或LOAD您以前保存的树,但要确认模板的存在。) 之后就可以运行各种命令了。 但是命令是有限的。 ***注意***从那张源代码截图可看出本软件支持的命令…… 还有就是import_me目录下的developing.txt是我开发时积累的命令脚本,大家可以导入玩一玩。 4 ------------ 欢迎批评与建议。 作者:cmpltrtok 电邮:cmpltrtok@sina.com 5 ------------ 命令列表: 作者还是不放心,把命令列表写一下: 删除分类……。 删除……属于……。 ……是一种……不是一种……。 ……是一种……。 ……是一个……不是一个……。 ……是一个……。 ……是一种……(吗)? ……是一个……(吗)? ……是什么? ……是……吗?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值