栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
  • 1.题目
  • 2.解题思路
  • 3.代码
  • 4.与字符串处理操作有关的一些总结
  • 5.参考博客

1.题目

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

  • 无论用户说什么,首先把对方说的话在一行中原样打印出来;
  • 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
  • 把原文中所有大写英文字母变成小写,除了 I;
  • 把原文中所有独立的 can you、could you 对应地换成 I can、I 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
结尾无空行
2.解题思路

首先自己做的时候感觉无从下手,这道题从多方面考察了对字符串的处理,哎,自己这方面还是不行。参考网上的代码,发现需要用到许多关于字符串处理的函数以及字符串的一些类,正好通过这道题可以总结学习一下,此外还有的代码使用的是正则表达式,关于这种解法没有做深入了解。第一种解题的大致思想是在每个非数字字母之前添加上空格,将单词、数字以及符号分成一个个的块依次进行处理。具体思路详见代码及注释。

3.代码
 #include 
 using namespace std;
 int main()
 {
 	int n;
 	cin>>n;
 	getchar();
 	for(int i=0;i str;
		 while(ss>>s1)//相当于输入一个个的单词,这样就可以消掉句子前的空格以及单词间多余的空格 
		 {
		 	str.push_back(s1);
		  }
		  str.push_back("");//多向容器中加入一个元素,防止下面i+1溢出 
		  if(!isalnum(str[0][0]))cout<<" ";//若第一个字符串的第一个字符是符号,则需要先输出一个空格,因为题目要求"AI:"后面要有一个空格。
		  for(int i=0;i 
4.与字符串处理操作有关的一些总结 
  1. 用于进行字符判断的函数,若是则返回非0,不是则返回0:
  • isalnum()
    判断输入的字符是否为字母或者数字,即是否在 “A – Z” 或者 “a – z” 或者"0 – 9"之间
  • isdigit()
    判断输入的字符是否是数字
  • isalpha()
    判断输入的字符是否为字母,即是否在 “A – Z” 或者 "a – z"之间
  • islower()
    判断字符是否小写字母
  • isupper()
    判断字符是否大写字母
  • isblank()
    判断输入字符是否为空格,或者tab键制表符,即space 和 t
  • isspace()
    判断输入字符是否为 空格,或者tab键制表符,’r’ 或 ‘n’ 等
  1. 用于进行字符转换的函数,使用时参数输入为字符类型:
  • toupper()
    将一个字符转换为大写
  • tolower()
    将一个字符转换为小写
  1. stringstream的妙用:
    istringstream、ostringstream 和 stringstream三个类分别用来进行流的输入、输出和输入输出操作。 stringstream 类主要用来进行数据类型的转换,由于使用string对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库的数据类型转换而言, 更加安全、自动和直接。
#include 
#include 
using namespace std;
int main()
{
	string str = "hello world";
	cout << str << endl;
	stringstream ss(str); //将str复制到ss
	string abc;
	while(ss >> abc) //相当于输入一个个的单词
	{
		cout << abc < 

代码输出结果:

5.参考博客

1.PTA 估值一亿的AI核心代码(全网最短的代码)不到50行,一看就会
2.C++中toupper、tolower 、isalpha、isalnum、isdigit、islower、isupper、isblank、isspace的用法
3.c++ stringstream ss()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290155.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号