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

题目链接:

PTA | 程序设计类实验辅助教学平台

用到的函数:

getline(cin,s) 读取一行串(串中可包括空格) --s为string类型

tolower(char c) 若c为大写字母则转为小写字母,若为数字或小写字母则不变。

对应小写转大写为toupper()

isalnum(char c) 判断c是否为字母或数字,是返回true,否则返回false;

string操作函数:

s.find(string ss)  返回ss在s中第一次匹配的位置,没找到返回-1。

s.find_first_not_of(" ") 输入参数为一个string类型的字符串str或char类型的字符str,在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。

s.find_last_not_of(' ') 输入参数为一个string类型的字符串str或char类型的字符str,在字符串中倒着查找第一个与str中的字符都不匹配的字符,返回它的位置。

s.substr(pos,len) 返回从串s pos位置开始往后数len个字符构成的子串

s.replace(pos,len,"string") 将串s pos位置开始往后数len个字符构成的子串替换成string

代码: 

最后一个样例没过,后天打天梯了,没时间找了。

#include <bits/stdc++.h>

using namespace std;

int n;
void fenjie(string s){
	bool flag=true;
	s.erase(0,s.find_first_not_of(" "));
	s.erase(s.find_last_not_of(" ")+1,s.length());
	for(int i=0;i<s.length();i++){
		if(isalnum(s[i])){
			if(s[i]!='I')
				s[i]=tolower(s[i]);//toupper()
		}	
		else if(s[i]==' '){
			if(i<s.length()-1&&s[i+1]==' '){
				s.erase(i,1);
				i--;
			}
		}
		else{
			if(s[i]=='?')
				s[i]='!';
			if(i>0&&s[i-1]==' '){
				s.erase(i-1,1);
				i--;
			}
		}
	}
	for(int i=0;i<s.length();i++){
		if(i+7<=s.length()&&s.substr(i,7)=="can you"){
			s.replace(i,7,"I can");
			i=i+4;
		}
		else if(i+9<=s.length()&&s.substr(i,9)=="could you"){
			s.replace(i,9,"I could");
			i=i+6;
		}
		else if(s.substr(i,1)=="I"){
			if(i>0&&isalnum(s[i-1]))
				continue;
			if(i+1<s.length()&&isalnum(s[i+1])){
				continue;
			}
			s.replace(i,1,"you");
			i=i+2;
		}
		else if(i+2<=s.length()&&s.substr(i,2)=="me"){
			if(i>0&&isalnum(s[i-1]))
				continue;
			if(i+2<s.length()&&isalnum(s[i+2])){
				continue;
			}
			s.replace(i,2,"you");
			i=i+2;
		}
	}
	cout<<s<<endl;
}
int main(){
	cin>>n;
	string s;
	getline(cin,s);
	while(n--){
		getline(cin,s);
		cout<<s<<endl;
		cout<<"AI: ";
		fenjie(s);
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值