题目

思路
-
输入字符串有空格,需要用getline;
-
字符串的拆分,用substr函数;
-
对于“Are you kidding me? @/@”的输出,需要额外添加转义符号。
注:转义字符是以‘\’为开头的字符,后面跟一个或几个字符,其意思是将反斜杠‘\’后面的字符转变成为另外的意义。如:\n 不代表字母n而作为换行符。常用的转义字符及其含义如下表所示:
\n 换行
\t 横向跳格(跳到下一制表位置)
\v 竖向跳格
\b 退格
\r 回车
\f 走纸换页
\ 反斜杠字符’\’
\’ 单引号字符
\a 鸣玲
\ddd 1到3位八进制数所代表的字符
\xhh 1到2位十六进制数所代表的字符
-
0号测试点为题目给出的测试用例,1号测试点数组中含有 0 值,2号测试点中含有负数值
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string s; //录入手集合
getline(cin,s);
string shou[11],yan[11],kou[11];
int a1=0,a2=0;
int num1=0; //num1记录手集合个数
for(int i=0;i<s.length();i++){
if(s[i]=='[') a1=i;
if(s[i]==']'){
a2=i;
shou[num1++]=s.substr(a1+1,a2-a1-1);
}
}
getline(cin,s); //录入眼集合
a1=0,a2=0;
int num2=0; //num2记录眼集合个数
for(int i=0;i<s.length();i++){
if(s[i]=='[') a1=i;
if(s[i]==']'){
a2=i;
yan[num2++]=s.substr(a1+1,a2-a1-1);
}
}
getline(cin,s); //录入口集合
a1=0,a2=0;
int num3=0; //num3记录口集合个数
for(int i=0;i<s.length();i++){
if(s[i]=='[') a1=i;
if(s[i]==']'){
a2=i;
kou[num3++]=s.substr(a1+1,a2-a1-1);
}
}
int n; cin>>n;
int zs,zy,k,ys,yy;
for(int i=0;i<n;i++){
cin>>zs>>zy>>k>>yy>>ys;
if(zs>num1 || zs<=0 || zy>num2 || zy<=0 || k>num3 || k<=0 || ys>num1 || ys<=0 || yy>num2 || yy<=0) {
cout<<"Are you kidding me? @\\/@"<<endl;
continue;
}
else cout<<shou[zs-1]<<'('<<yan[zy-1]<<kou[k-1]<<yan[yy-1]<<')'<<shou[ys-1]<<endl;
}
return 0;
}
本文详细解析了一个使用C++实现的表情组合器代码。该程序通过读取手、眼、口的表情元素,允许用户创建自定义表情组合。文章深入探讨了如何利用字符串操作和条件判断来实现这一功能,包括使用getline进行输入处理,substr进行字符串拆分,以及如何处理边界情况和错误输入。
710

被折叠的 条评论
为什么被折叠?



