当前位置:   article > 正文

团体程序设计天梯赛-练习集 L1-064 估值一亿的AI核心代码 (20分)_消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格

消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格

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

在这里插入图片描述
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输出样例:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这题做吐我了,对于字符串的处理很麻烦,但是不是很难。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;
int n;
string str;

int d(char x){
	if(x>='A' && x<='Z') return -1;
	if(x>='a' && x<='z') return -2;
	if(x>='0' && x<='9') return -3;
	if(x==' ') return 2;
	return 1;
}
string convert(string str){
	string b = " ";
	for(int i = 0; i < str.length(); i ++){
		if(str[i]>='A' && str[i]<='Z' && str[i]!='I'){
			str[i] += 32;
		}
		if(str[i]=='?')
			str[i] = '!';
	}
	b += str;
	b += " ";
	str.clear();
	str += " ";
	for(int i = 1; i < b.length()-1; i++){
		if(b[i]==' '&& b[i-1]==' ')//消除连续空格
			continue;
		else if(d(b[i+1])==1 && b[i]==' ')//排除标点符号前空格
			continue;
		else
			str += b[i];
	}
	str += ' ';
	return str;
}


int main(){
	cin >> n;
	getchar();
	while(n--){
		getline(cin, str);
		cout << str << endl;
		cout << "AI: ";
		int flag = 0;
		for(int i = 0; i < str.length(); i ++){
			if(str[i]!=' '){
				flag = 1;
				break;
			}
		}
		if(flag==0){//排除全是空格
			cout << endl;
			continue;
		}
		str = convert(str);
		//cout << str << endl;
		string temp;
		for(int i = 0; i < str.length(); i ++){
			temp += str[i];
			if(d(str[i])>0 && str[i+1]=='m'&& str[i+2]=='e' && d(str[i+3])>0){
				i+=2;
				temp += "you";
			}else if(d(str[i])>0 && str[i+1]=='I' && d(str[i+2])>0){
				i++;
				temp += "you";
			}else if(d(str[i])>0 && str[i+1]=='c' && str[i+2]=='a' && str[i+3]=='n' && str[i+4]==' ' && str[i+5]=='y' && str[i+6]=='o' && str[i+7]=='u' && d(str[i+8])>0){
				i += 7;
				temp += "I can";
			}else if(d(str[i])>0 && str[i+1]=='c' && str[i+2]=='o' && str[i+3]=='u' && str[i+4]=='l' && str[i+5]=='d' && str[i+6]==' ' && str[i+7]=='y' && str[i+8]=='o' && str[i+9]=='u' && d(str[i+10])>0){
				i += 9;
				temp += "I could";
			}
		}
		//cout << temp << endl;
		//cout << temp.length() << endl;
		str="";
		str += temp;
		int len;
		for(int i = str.length()-1; i >= 0; i --){//找到最后一个不为空格的索引
			if(str[i]!=' '){
				len = i;
				break;
			}
		}
		int cnt = 0;
		for(int i = 0; i <= len; i ++){
			if(i>0 && str[i]==' ' && d(str[i+1])==1)
				continue;
			if(str[i]!=' '){
				cout << str[i];
				cnt++;
			}else if(cnt>0){
				cout << " ";
			}
		}
		cout << endl;
	}

	
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/418677
推荐阅读
相关标签
  

闽ICP备14008679号