题目链接:
用到的函数:
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);
}
}