精华内容
下载资源
问答
  • AI核心代码

    2019-04-18 09:38:04
    PTA 04:(天梯赛)AI核心代码 一、题目 本题要求你实现一个简易版的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻单词间的多个空格换成 1 个...

    PTA 04:(天梯赛)AI核心代码

    一、题目

    本题要求你实现一个简易版的 AI 英文问答程序,规则是:

    无论用户说什么,首先把对方说的话在一行中原样打印出来;
    消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
    把原文中所有大写英文字母变成小写,除了 I;
    把原文中所有独立的 I 和 me 换成 you;
    把原文中所有的问号 ? 换成惊叹号 !;
    把原文中所有独立的 can you 换成 I can —— 这里“独立”是指被空格或标点符号分隔开的单词;
    在一行中输出替换后的句子作为 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: could you show you 5
    What Is this prime? I,don 't know
    AI: what Is this prime! you,don’t know


    二、代码

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <string> 
    using namespace std;
    //string s;
    //char s[1001]; 
    
    //1、删除空格(删除前后空格,删除中间连续的空格保留一个,删除符号后的空格 
    //后面的条件依靠空格标准化 
    
    bool isDependent(char ch)
    { //判断ch是否分隔字符 (字母、数字、空格、标点、 \0<后三类是分隔符号>) 
    	ch = tolower(ch);
    	if((ch >='0' && ch<='9') || (ch>='a' && ch<='z'))
    	    return false;
    	else return true;
    } 
    
    bool iscanyou(char t[],int j)
    {//判断是否为can you 
        if(t[j]=='c'&&t[j+1]=='a'&&t[j+2]=='n'&&t[j+3]==' '&&t[j+4]=='y'&&t[j+5]=='o'&&t[j+6]=='u')
        return true;
        else return false;
    }
    
    void go(string s)
     {// 根据s输出AI的回答 
     	//定义辅助变量t,来copy s的字符串 
     	char t[3001];
     	int i, j; //定义两个下标; i :定义到s的第一个非空;
    	for(i = 0 ; s[i]!= '\0' && s[i] == ' ' ; i++);  //全为空格的时候会将s的最后一个字符‘\0’存储 
        j = 0;
        //保证每次往后扫一次用for,往后扫的次数要跳跃无规律用while
    	
    	while(s[i] != '\0'){ //把s串copy到t,但是连续的空格只copy一次 
    		if(s[i] == ' ' && s[i-1] ==' ')//连续的空格第一个要,后面的都不要 
    		{ //一个一个copy到t字符串同时判断 
    			i++;
    			continue;
    		}
    		
    	    if(s[i]=='?'){
    	   	t[j++]='!';
    	   	++i;
    	   	continue;//回到循环开头 
    	   }
    		
    		  
    		if( s[i] != 'I')
    		{
    		    t[j] = tolower(s[i]);
    		    i++;
    		    j++;
    		    continue;
    	    }
    		    t[j++] = s[i++]; //不能copy连续的空格 ,先读变量值,为下一轮循环做准备 
    		//此时t没有处理'\0' 后面读出字符串会出错 
    	} 
    	
    	t [j]='\0';// 字符串结尾标志; 
    
        j = 0;
        while(t[j]!='\0')
        {
        	if(t[j]=='I' && ( j == 0 || isDependent(t[j-1]) ) && isDependent(t[j+1]) ) //独立的I(前后是空格或者是标点符号)才要换成you ,j为0会越界 
        	{
        	    cout << "you";
        	    j++;
        	    continue;
        	}
        	
        	if(t[j]=='m' && t[j+1]=='e' && (j==0 || isDependent(t[j-1])) && isDependent(t[j+2]) ) //j+2不会越界 
        	{
                 cout << "you";
                 j = j+2;
                 continue;
    	    }
    	    
    	    if(t[j]==' ' && isDependent(t[j+1]))
    		{
    			j++;
    			continue;
    		}
    			 
    		if(iscanyou(t,j)&&(j==0||isDependent(t[j-1]))&&isDependent(t[j+7]))
            {//把can you →I can 
                cout<<"I can";
                j=j+7;  //can you一共有七个字符 
                continue;
            }
            
            if(s[j]==' '&&s[j+1]=='\0')
            {//处理最后一个空格 
                j++;
                continue;}
            
    	    cout << t[j];
    	    j++;
    	}
    	cout <<endl; 
     }
    
    
    //主函数
    int main()
    {	
        int n;
    	string s;
    	cin >>n;
    	getchar();// 吸收回车 《cstdio> 
    	for ( int i=1; i<=n ; i++)
    	{
    		getline(cin , s);
    		cout << s << endl ;
    		cout << "AI: ";
    		go(s); // 根据s输出AI的回答 
    	}
    	
    	return 0; 
    }
    
    展开全文
  • pythonAI核心代码

    2020-11-21 12:55:50
    基于python的AI核心代码 打入问题计算机自动回答 替换了:你—我、吗—(去掉)、?—!等 欢迎下载使用!!!!!!!!!
  • cs代码-估值1个亿的AI核心代码
  • AI核心代码向量化的思维导图,逐步变动的讲解。—————
  • 据说价值几个亿的人工智能核心代码 代码放在jsrun上,可以预览和编辑,自己去查看吧。或者复制下面代码放到本地文件运行。 在线查看:http://jsrun.pro/pHbKp 本地查看,新建html文件贴入下面代码后用浏览器...

    据说价值几个亿的人工智能核心代码
    在这里插入图片描述
    代码放在jsrun上,可以预览和编辑,自己去查看吧。或者复制下面代码放到本地文件运行。
    在线查看:http://jsrun.pro/pHbKp
    本地查看,新建html文件贴入下面代码后用浏览器打开:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>AI</title>
    </head>
    
    <body>
        <style>
            * {
                overflow: hidden;
            }
    
            #A {
                width: 95%;
                position: absolute;
                top: 10px;
                bottom: 50px;
                padding: 3px;
            }
    
            #B {
                width: 100%;
                height: 20px;
                position: absolute;
                bottom: 20px;
                padding: 5px;
            }
    
            #C {
                height: 90%;
                width: 95%;
                margin: 0 auto;
                font-size: 12px;
                color: green;
            }
    
            #D {
                list-style: none;
                margin: 0;
                padding: 0;
                font-size: 14px;
            }
    
            .ME {
                color: rgb(207, 84, 156);
                width: 100%;
            }
    
            .ME>span {
                display: block;
                width: auto;
                max-width: 80%;
                float: left;
                border-radius: 5px;
                background: #abd5f7;
                padding: 3px;
                margin-top: 15px;
            }
    
            .ME::before {
                float: left;
                content: "";
                border-style: solid;
                border-width: 4px;
                border-color: transparent #abd5f7 transparent transparent;
                margin-top: 28px;
            }
    
            .U {
                color: rgb(134, 165, 136);
                width: 100%;
            }
    
            .U>span {
                display: block;
                width: auto;
                max-width: 80%;
                float: right;
                padding: 3px;
                background: #eaf0a1;
                border-radius: 5px;
                margin-top: 15px;
            }
    
            .U::before {
                float: right;
                content: "";
                border-style: solid;
                border-width: 4px;
                border-color: transparent transparent transparent #eaf0a1;
                margin-top: 28px;
            }
        </style>
        <script>
            function keyEnter() {
                if (event.keyCode == 13) {
                    var chars = document.getElementById("C").value;
                    if (chars.length) {
                        if (chars.length > 200) {
                            alert("最多输入200个字符哟!");
                        } else {
                            document.getElementById("C").value = '';
                            var li = document.createElement("li");
                            li.innerHTML = `<li class="U"><span>&ensp;${chars}&ensp;</spam></li>`;
                            document.getElementById("D").appendChild(li);
                            li = document.createElement("li");
                            chars = AI(chars);
                            li.innerHTML = `<li class="ME"><span>&ensp;${chars}&ensp;</spam><li>`;
                            document.getElementById("D").appendChild(li);
                            while (document.getElementById('D').offsetHeight > document.getElementById('A').offsetHeight -  5) {
                                document.getElementById('D').removeChild(document.getElementById('D').getElementsByTagName( 'li')[0])
                            }
                        }
                    }
                }
            }
    
            function AI(e) {
                var ot = e.replace(/,/g, ',');
                ot = ot.replace(/\?/g, '!');
                ot = ot.replace(/?/g, '!');
                ot = ot.replace(/吗/g, ' ');
                var st = ot.split(',');
                var tt = st.pop();
                if (tt =="") {tt = ot};
                return tt;
            }
        </script>
        <div id="A">
            <ul id="D">
                <li class="ME"><span>《AI人工智能5.0》加载完成!</spam>
                <li>
                <li class="ME"><span>欢迎光临!我是智能小助手,很高兴为你服务!</spam>
                <li>
                    <ul>
        </div>
        <div id="B">
            <input type="text" id="C" onkeydown="keyEnter()">
            <div>
    </body>
    
    </html>
    
    展开全文
  • 手把手教你过AI核心代码

    千次阅读 2019-04-11 18:47:40
    AI核心代码 难得梅姐带着我们打一遍这个天梯赛的题目,这么好的机会当然不能放过啦,我也就把大致流程整理了一下,源码在最后,不过能从头开始过一遍还是很棒的呀 题目 7-2 AI核心代码 (30 分) 本题要求你实现一个...

    AI核心代码

    难得梅姐带着我们打一遍这个天梯赛的题目,这么好的机会当然不能放过啦,我也就把大致流程整理了一下,源码在最后,不过能从头开始过一遍还是很棒的呀

    题目

    7-2 AI核心代码 (30 分)

    本题要求你实现一个简易版的 AI 英文问答程序,规则是:

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

    What Is this prime? I,don 't know

    AI: what Is this prime! you,don’t know

    逻辑分析

    先定义数据结构,自然是字符数组/字符串
    最初考虑主函数逻辑,主要是读取输入语句,并调用接口处理输入语句并输出。基本流程是,读入一句,对其进行扫描、判断、操作,再存到新的字符串,最后输出新的字符串。

    int main() {
    	int n;		//行数n,s存放输入的语句
    	string s;
    	cin >> n;		
    	for (int i = 1; i <= n; i++) {
    		getline(cin, s);
    		cout << s << endl;		//先输出原话,再输出处理后的AI回答
    		cout << "AI: ";
    		answer();	//处理并输出回答
    	}
    	return 0;
    }
    

    然后对接口answer()进行定义。
    首先考虑把多余的空格删到只剩一个

    void answer(string s) {		//根据s处理并输出回答
    	int i, j;		//i定位到s的第一个非空
    	for (i = 0; s[i] == ' '; i++) {
    
    	}
     }
    

    然后对边界问题进行考虑。当字符串全为空格的时候呢?会死循环或越界溢出吗?
    其实不会,因为字符串有个结尾符‘\0’,所以及时字符串全空,到最后的结尾符也会停止循环。
    定位到第一个非空字符后就可以开始输入。

    void answer(string s) {		//根据s处理并输出回答
    	string t;	//t为处理后的字符
    	int i, j = 0;		//i定位到s的第一个非空,j表示t串的字符
    	for (i = 0; s[i] == ' '; i++) {	
    		//仅仅用于定位.因为字符串有个结尾符‘\0’,所以及时字符串全空,到最后的结尾符也会停止循环
    	}
    	while (s[i] != '\0') {	//进行输入
    		if (s[i] == ' '&&s[i - 1] == ' ') {		//跳过多余的空格
    			i++;
    			continue;
    		}
    		t[j] = s[i];	//将s串的非空或者单个空格给到t串,之后分别+1进行下一轮输入
    		j++;
    		i++;
    	}
     }
    

    但是这个时候有一个个问题,就是t串结尾没有结尾符,这个好办,最后给他加一个。此外,我们在一个个判断的时候,可以顺便实现问号变感叹号,大写变小写的功能。

    id answer(string s) {
    	string t;	//t为处理后的字符串
    	int i, j = 0;		//i定位到s的第一个非空,j表示t串的字符
    	for (i = 0; s[i] == ' '; i++) {
    		//仅仅用于定位.因为字符串有个结尾符‘\0’,所以及时字符串全空,到最后的结尾符也会停止循环
    	}
    	while (s[i] != '\0') {	//进行输入
    		if (s[i] == ' '&&s[i - 1] == ' ') {		//跳过多余的空格
    			i++;
    			continue;
    		}
    		if (s[i] == '?') {		//将输入的问号变为感叹号
    			t[j] = '!';
    			i++;
    			j++;
    			continue;
    		}
    
    		if (s[i] != 'I') {		//将除了I的大写变小写
    			t[j] = tolower(s[i]);
    			i++;
    			j++;
    		}
    		else {
    			t[j] = s[i];	//将s串的非空或者单个空格给到t串,之后分别+1进行下一轮输入
    			j++;
    			i++;
    		}
    	}
    	t[j] = '\0';	//为t串末尾增加结尾符
    

    这里用到了tolower()函数将大写变成小写。
    将s串的有效都给了t串之后,我们可以遍历t串来进行进一步操作,比如将
    独立的I和me变成you

    j = 0;
    	while (t[j] != '\0') {
    		//独立的I,意味着左右均是分隔符
    		if (t[j] == 'I'&&(j==0||isIndependent(t[j - 1])) && isIndependent(t[j + 1])) {			
    			cout << "you";
    			j++;
    			continue;
    		}
    		//独立的me
    		if (t[j] == 'm'&&t[j + 1] == 'e'&& (j == 0 || isIndependent(t[j - 1])) && isIndependent(t[j + 2])) {	
    			cout << "you";
    			j += 2;
    			continue;
    		}
    

    因为需要判断是否独立,所以构造了isIndependent()函数。但是遇到了j+1,j-1等,需要考虑边界情况。
    当独立的I,me是在字符串开头,j=0,所以j-1会导致非法访问,我们额外加一个条件(j==0||isIndependent(t[j - 1]),这样j=0的时候前面的条件成立,程序不再判断后面的条件,于是避免了非法访问。
    而因为while循环中有s[i] != '\0’的条件,所以及时在串的末尾,之后还有一个\0,也就是说最坏情况下t[j+1]等于\0,不会导致越界。
    这里给出是否为分隔符的判断
    //判断字符是否为分隔符

    bool isIndependent(char ch) {
    	bool result = true;
    	ch = tolower(ch);
    	if ((ch >= '0' && ch <= '9') || (ch >= 'a'&&ch <= 'z')) {
    		result = false;
    	}
    	return result;
    }
    

    到此,大致的程序已经出来了,我们还差末尾符号前的空格和把 can you 换成 I can。但是此时运行程序,出现运行时错误,不能正常输出t串,为什么呢?
    回头看程序,发现在一开始就有瑕疵。我们string了t,但是没有初始化,于是没有真正地为其分配地址。那么在给t[j]赋值的时候,不会给它分配一个首地址。这就导致直接cout会出错。有两个解决办法,一个是初始化,但是谁会愿意初始化的时候打几千个字符呢?否决!第二个方法使用for循环遍历t串,这样就能顺利输出了。
    但还是感觉好麻烦有没有?所以干脆放弃用string,直接用字符数组吧!
    那么要预定多长的数组呢?
    题目要求一行最多1000个,那就1000个吗?不行哦,我们最后有个结尾符\0,也要占一个。
    那就1001个吧。也不行,要是全是1000个I,我们要把I变成you,不就要三倍了吗?
    所以还是3001个吧!保险起见再多加一个。
    整合一下,就有现在的代码。

    int main() {
    	int n;		//行数n,s存放输入的语句
    	string s;
    	cin >> n;
    	getchar();
    	for (int i = 1; i <= n; i++) {
    		getline(cin, s);
    		cout << s << endl;		//先输出原话,再输出处理后的AI回答
    		cout << "AI: ";
    		answer(s);	//处理并输出回答
    	}
    	return 0;
    }
    
    //根据s处理并输出回答
    void answer(string s) {
    	char t [3002];	//t为处理后的字符串
    	int i, j = 0;		//i定位到s的第一个非空,j表示t串的字符
    	for (i = 0; s[i] == ' '; i++) {
    		//仅仅用于定位.因为字符串有个结尾符‘\0’,所以及时字符串全空,到最后的结尾符也会停止循环
    	}
    	while (s[i] != '\0') {	//进行输入
    		if (s[i] == ' '&&s[i - 1] == ' ') {		//跳过多余的空格
    			i++;
    			continue;
    		}
    		if (s[i] == '?') {		//将输入的问号变为感叹号
    			t[j] = '!';
    			i++;
    			j++;
    			continue;
    		}
    
    		if (s[i] != 'I') {		//将除了I的大写变小写
    			t[j] = tolower(s[i]);
    			i++;
    			j++;
    		}
    		else {
    			t[j] = s[i];	//将s串的非空或者单个空格给到t串,之后分别+1进行下一轮输入
    			j++;
    			i++;
    		}
    	}
    	t[j] = '\0';	//为t串末尾增加结尾符
    
    	//I,me变成you
    	j = 0;
    	while (t[j] != '\0') {
    		//独立的I,意味着左右均是分隔符
    		if (t[j] == 'I'&&(j==0||isIndependent(t[j - 1])) && isIndependent(t[j + 1])) {			
    			cout << "you";
    			j++;
    			continue;
    		}
    		//独立的me
    		if (t[j] == 'm'&&t[j + 1] == 'e'&& (j == 0 || isIndependent(t[j - 1])) && isIndependent(t[j + 2])) {	
    			cout << "you";
    			j += 2;
    			continue;
    		}
    		cout << t[j];
    		j++;
    	}
    	cout << endl;
    }
    
    //判断字符是否为分隔符
    bool isIndependent(char ch) {
    	bool result = true;
    	ch = tolower(ch);
    	if ((ch >= '0' && ch <= '9') || (ch >= 'a'&&ch <= 'z')) {
    		result = false;
    	}
    	return result;
    }
    

    然后我们解决剩下的两个问题。
    首先是末尾符号前的空格
    我们经过对s串的遍历,已经确保连续的空格变成了单个空格,也就是说,如果现在t串末尾是符号,那么我们要去掉符号前的空格。
    可以用上之前的isIndependent(),如果这个空格需要去掉,那么他之后一定不是数字或字母(要么符号,要么\0,这两种情况都要去空格)

    //如果是标点前的空格就不输出
    		if (t[j] == ' '&&isIndependent(t[j+1])) {
    			j++;
    			continue;
    		}
    		cout << t[j];
    		j++;
    	}
    

    然后是把 can you 换成 I can,具体方法和me变成you类似(就是长了点嘛),不过太长了我们还是把它写成函数吧

    //判断是否为独立的can you
    bool isCanyou(char ch[],int n) {
    	bool result = false;
    	if (ch[n] == 'c'&&ch[n + 1] == 'a'&&ch[n + 2] == 'n'&&ch[n + 3]==' ' && ch[n + 4] == 'y'&&ch[n + 5] == 'o'&&ch[n + 6] == 'u') {
    		if ((n == 0 || isIndependent(ch[n - 1])) && isIndependent(ch[n + 7])) {
    			result = true;
    		}
    	}
    	return result;
    }
    

    然后在上面的answer函数中添加判断,如果是,就输出改变“I can”。记得要让j加上can you的长度(7)来跳过其他字符。

    ······
    //独立的can you
    		if (isCanyou(t, j)) {
    			cout << "I can";
    			j += 7;
    			continue;
    		}
    
    		//独立的could you
    		if (isCouldyou(t, j)) {
    			cout << "I could";
    			j += 9;
    			continue;
    		}
    ······
    

    把上述代码插入到answer()中,代码基本成形。

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    void answer(string s);
    bool isIndependent(char ch);
    bool isCanyou(char ch[], int n);
    
    int main() {
    	int n;		//行数n,s存放输入的语句
    	string s;
    	cin >> n;
    	getchar();
    	for (int i = 1; i <= n; i++) {
    		getline(cin, s);
    		cout << s << endl;		//先输出原话,再输出处理后的AI回答
    		cout << "AI: ";
    		answer(s);	//处理并输出回答
    	}
    	return 0;
    }
    
    //根据s处理并输出回答
    void answer(string s) {
    	char t[3002];	//t为处理后的字符串
    	int i, j = 0;		//i定位到s的第一个非空,j表示t串的字符
    	for (i = 0; s[i] == ' '; i++) {
    		//仅仅用于定位.因为字符串有个结尾符‘\0’,所以及时字符串全空,到最后的结尾符也会停止循环
    	}
    	while (s[i] != '\0') {	//进行输入
    		if (s[i] == ' '&&s[i - 1] == ' ') {		//跳过多余的空格
    			i++;
    			continue;
    		}
    		if (s[i] == '?') {		//将输入的问号变为感叹号
    			t[j] = '!';
    			i++;
    			j++;
    			continue;
    		}
    
    		if (s[i] != 'I') {		//将除了I的大写变小写
    			t[j] = tolower(s[i]);
    			i++;
    			j++;
    		}
    		else {
    			t[j] = s[i];	//将s串的非空或者单个空格给到t串,之后分别+1进行下一轮输入
    			j++;
    			i++;
    		}
    	}
    	t[j] = '\0';	//为t串末尾增加结尾符
    
    	//I,me变成you; can you 换成 I can 
    	j = 0;
    	while (t[j] != '\0') {
    		//独立的I,意味着左右均是分隔符
    		if (t[j] == 'I' && (j == 0 || isIndependent(t[j - 1])) && isIndependent(t[j + 1])) {
    			cout << "you";
    			j++;
    			continue;
    		}
    		//独立的me
    		if (t[j] == 'm'&&t[j + 1] == 'e' && (j == 0 || isIndependent(t[j - 1])) && isIndependent(t[j + 2])) {
    			cout << "you";
    			j += 2;
    			continue;
    		}
    
    		//独立的can you
    		if (isCanyou(t, j)) {
    			cout << "I can";
    			j += 7;
    			continue;
    		}
    
    		//如果是标点前的空格就不输出
    		if (t[j] == ' '&&isIndependent(t[j+1])) {
    			j++;
    			continue;
    		}
    		cout << t[j];
    		j++;
    	}
    	cout << endl;
    }
    
    //判断字符是否为分隔符
    bool isIndependent(char ch) {
    	bool result = true;
    	ch = tolower(ch);
    	if ((ch >= '0' && ch <= '9') || (ch >= 'a'&&ch <= 'z')) {
    		result = false;
    	}
    	return result;
    }
    
    //判断是否为独立的can you
    bool isCanyou(char ch[],int n) {
    	bool result = false;
    	if (ch[n] == 'c'&&ch[n + 1] == 'a'&&ch[n + 2] == 'n'&&ch[n + 3]==' ' && ch[n + 4] == 'y'&&ch[n + 5] == 'o'&&ch[n + 6] == 'u') {
    		if ((n == 0 || isIndependent(ch[n - 1])) && isIndependent(ch[n + 7])) {
    			result = true;
    		}
    	}
    	return result;
    }
    

    到此,如上代码已经能通过PTA的这道题目了,但是你觉得有些地方冗长,可以再写成接口函数,比如把读入数据、遍历t串并输出写成接口。

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    void answer(string s);
    bool isIndependent(char ch);
    bool isCanyou(char ch[], int n);
    void putIn(string s, char t[], int &i, int &j);
    void print(char t[], int &j);
    
    int main() {
    	int n;		//行数n,s存放输入的语句
    	string s;
    	cin >> n;
    	getchar();
    	for (int i = 1; i <= n; i++) {
    		getline(cin, s);
    		cout << s << endl;		//先输出原话,再输出处理后的AI回答
    		cout << "AI: ";
    		answer(s);	//处理并输出回答
    	}
    	return 0;
    }
    
    //根据s处理并输出回答
    void answer(string s) {
    	char t[3002];	//t为处理后的字符串
    	int i, j = 0;		//i定位到s的第一个非空,j表示t串的字符
    	for (i = 0; s[i] == ' '; i++) {
    		//仅仅用于定位.因为字符串有个结尾符‘\0’,所以及时字符串全空,到最后的结尾符也会停止循环
    	}
    	putIn(s, t, i, j);	//把s输入给t
    	t[j] = '\0';	//为t串末尾增加结尾符
    	j = 0;		//为方便遍历将j置零
    	print(t,j);		//遍历t并一顿操作后输出,主要把I,me变成you; can you 换成 I can
    	cout << endl;
    }
    
    //判断字符是否为分隔符
    bool isIndependent(char ch) {
    	bool result = true;
    	ch = tolower(ch);
    	if ((ch >= '0' && ch <= '9') || (ch >= 'a'&&ch <= 'z')) {
    		result = false;
    	}
    	return result;
    }
    
    //判断是否为独立的can you
    bool isCanyou(char ch[],int n) {
    	bool result = false;
    	if (ch[n] == 'c'&&ch[n + 1] == 'a'&&ch[n + 2] == 'n'&&ch[n + 3]==' ' && ch[n + 4] == 'y'&&ch[n + 5] == 'o'&&ch[n + 6] == 'u') {
    		if ((n == 0 || isIndependent(ch[n - 1])) && isIndependent(ch[n + 7])) {
    			result = true;
    		}
    	}
    	return result;
    }
    
    //把s输入给t
    void putIn(string s, char t[],int &i, int &j) {
    	while (s[i] != '\0') {	
    		if (s[i] == ' '&&s[i - 1] == ' ') {		//跳过多余的空格
    			i++;
    			continue;
    		}
    		if (s[i] == '?') {		//将输入的问号变为感叹号
    			t[j] = '!';
    			i++;
    			j++;
    			continue;
    		}
    
    		if (s[i] != 'I') {		//将除了I的大写变小写
    			t[j] = tolower(s[i]);
    			i++;
    			j++;
    		}
    		else {
    			t[j] = s[i];	//将s串的非空或者单个空格给到t串,之后分别+1进行下一轮输入
    			j++;
    			i++;
    		}
    	}
    }
    
    //遍历t并一顿操作后输出,主要把I,me变成you; can you 换成 I can
    void print(char t[], int &j) {
    	while (t[j] != '\0') {
    		//独立的I,意味着左右均是分隔符
    		if (t[j] == 'I' && (j == 0 || isIndependent(t[j - 1])) && isIndependent(t[j + 1])) {
    			cout << "you";
    			j++;
    			continue;
    		}
    		//独立的me
    		if (t[j] == 'm'&&t[j + 1] == 'e' && (j == 0 || isIndependent(t[j - 1])) && isIndependent(t[j + 2])) {
    			cout << "you";
    			j += 2;
    			continue;
    		}
    
    		//独立的can you
    		if (isCanyou(t, j)) {
    			cout << "I can";
    			j += 7;
    			continue;
    		}
    
    		//如果是标点前的空格就不输出
    		if (t[j] == ' '&&isIndependent(t[j + 1])) {
    			j++;
    			continue;
    		}
    		cout << t[j];
    		j++;
    	}
    }
    

    说白了,就是把读入数据的部分额外复制到pushIn()里,把遍历t串并输出的部分复制到print()里。没什么技术含量还要额外开辟空间。但是可以让answer()函数变得更精简更好看嘛QwQ
    以上,用餐愉快

    展开全文
  • AI核心代码】估值一个亿的AI核心代码(开源了) import java.util.Scanner; /** * <p> * AI核心代码,估值一个亿 * </p> * * @Author REID * @Blog https://blog.csdn.net/qq_39035773 * @...

    【AI核心代码】估值一个亿的AI核心代码(开源了)

    import java.util.Scanner;
    
    /**
     * <p>
     * AI核心代码,估值一个亿
     * </p>
     *
     * @Author REID
     * @Blog https://blog.csdn.net/qq_39035773
     * @GitHub https://github.com/BeginnerA
     * @Data 2021/3/3
     * @Version V1.0
     **/
    public class AiMain {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String str;
            while (true) {
                str = scanner.nextLine();
                str = str.replaceAll("吗", "");
                str = str.replaceAll("么", "");
                str = str.replaceAll("吧", "");
                str = str.replaceAll("?", "!");
                str = str.replaceAll("? ", "!");
                System.out.println(str);
            }
        }
    }
    

    AI核心代码,估值一个亿

     

    展开全文
  • 7-1 估值一亿的AI核心代码 (25分) 描述 以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把...
  • 开源一下AI核心代码~

    千次阅读 2018-12-13 21:01:46
    老样子,先看图,文末贴代码~ myeclipse版的 android studio 版的 ... * AI核心代码 价值1个亿~ * @author BillyLu * */ public class AiMain { public static void main(String[] args) { Scanner sc...
  • AI核心代码,价值一个亿,免费放送,自取不谢! 先来看下效果图: 代码是用版主手工用python语言一行一行敲出来的,费了九牛二虎之力,各位看官打赏点BTC,ETH什么的呀: #-*- coding:utf8 -*- # # AI核心...
  • 估值一亿的AI核心代码现已开源

    千次阅读 2018-12-14 18:14:25
    估值一亿的AI核心代码现已开源
  • 估值一亿的AI核心代码 PTA

    千次阅读 2020-10-31 14:26:27
    估值一亿的AI核心代码 PTA题目输入格式:输出格式:输入样例输出样例:分析解题思路:答案 题目 以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把...
  • 第一步:打开eclipse,在package explorer界面,右键,选择new,在子菜单选择Java project,输入project name为ai,点击finish; 第二步:双击刚新建的项目ai,再右键项目中的src目录,选择new--------class,...
  • https://shudong.wang/inbox/10... publick class AiMain { publick static void main(String[] args){ Scanner sc = new Scanner(System.in); String str; while(true...
  • 如果喜欢的话就拿去吧,不用客气。>Ω< package com.software.fanfan.ai; import java.util.Scanner; /** * Created by 追梦1819 on...public class AI { public static void main(String[] args) { ...
  • 朋友圈非常火的价值一个亿的AI核心代码,皮这一下我超级开心 ^-^ package myself; import java.util.Scanner; /** * * Title: AiMain * Description: Ai核心代码,皮这一下我非常开心 * @author Marmara...
  • PTA 估值一亿的AI核心代码 (20 分)

    千次阅读 2019-03-31 07:56:20
    估值一亿的AI核心代码 (20 分) AI.jpg 以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把...
  • 河大某学子写出市场估值过亿的AI核心代码!Just kidding! 本菜鸡打算将这行市场估值过亿的AI核心代码开源。 其实这TM就是一条替换语句,把“吗”去掉 把“?”换成“!”。由于我只替换了全角字符"?"...
  • 估值一亿的AI核心代码 (20分)

    千次阅读 2020-01-29 22:29:44
    估值一亿的AI核心代码(20分) 以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻...
  • 估值一亿的AI核心代码 (20分) 以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻单词...
  • 价值一个亿的AI核心代码(python)

    万次阅读 2021-02-08 19:41:04
    代码展示 print("小爱(๑•̀ㅂ•́)و✧:您有什么吩咐?") while True: AI = input('我:') print('小爱:',AI.replace("你", "我").replace('?','!').replace("不", " ").replace("吗", " ").replace("有", ...
  • L1-064 估值一亿的AI核心代码 (20 分) 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻单词间的多个空格换成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,196
精华内容 42,878
关键字:

人工智能核心代码