#include<iostream>
#include <string>
using namespace std;
int get (string hand,string a[]){//用于把初始三个字符串转换成不含[]的三个string数组
int k=0;
for(int i=0;i<hand.size();i++){
if(hand[i]!='['&&hand[i]!=' '&&hand[i]!=']'){
a[k]=a[k]+hand[i];
}
if(hand[i]==']'){
k++;
}
}
return k;
}
void paint(string a[],string b[],string c[],int len1,int len2,int len3,int select[]){//用于将萌萌哒表情画出来
bool yes=false; //是否该用户序号存在
int len[5]={len1,len2,len3,len2,len1};
for(int i=0;i<5;i++){
if(select[i]<=len[i]&&select[i]>0)
yes=true;
else{
yes=false;
cout<<"Are you kidding me? @\\/@"<<endl;
return;
}
}
if(yes==true){
cout<<a[select[0]-1]<<"(";
cout<<b[select[1]-1];
cout<<c[select[2]-1];
cout<<b[select[3]-1]<<")";
cout<<a[select[4]-1]<<endl;
}
}
int main(){
string hand,eye,mouth;
string a[11],b[11],c[11];
int K,select[5];
getline(cin,hand);
getline(cin,eye);
getline(cin,mouth);
cin>>K;
int len1=get(hand,a);
int len2=get(eye,b);
int len3=get(mouth,c);
for(int i=0;i<K;i++){
for(int j=0;j<5;j++){
cin>>select[j];
}
paint(a,b,c,len1,len2,len3,select);
}
return 0;
}
代码参考:
http://blog.csdn.net/wanmeiwushang/article/details/51545182
在大神代码的基础上进行了改良,用循环省去了不少代码。
总结:
1、一开始漏掉了paint函数中的select[i]>0的条件,导致结果出错。
2、最终的是方法,每次读取一行然后打印表情,不需要一次性把输入行全部读入完。select数组的用法十分巧妙。
3、getline函数是一次读取一整行。类似于C中的gets。
4、也有方法用到了容器。代码如下:
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
int main(){
vector<vector <string> > str;
for(int i=0;i<3;i++){
string s;
getline(cin,s);
vector<string> temp;
for(int j=0;j<s.length();j++){
if(s[j]=='['){
for(int k=j;k<s.length();k++){
if(s[k]==']') {
temp.push_back(s.substr(j+1,k-j-1));
break;
}
}
}
}
str.push_back(temp);
}
int n,a,b,c,d,e;
cin>>n;
while(n--){
cin>>a>>b>>c>>d>>e;
if(a<1||b<1||c<1||d<1||e<1||a>str[0].size()||b>str[1].size()||c>str[2].size())
cout<<"Are you kidding me? @\\/@"<<endl;
else cout<<str[0][a-1]<<'('<<str[1][b-1]<<str[2][c-1]<<str[1][d-1]<<')'<<str[0][e-1]<<endl;
}
return 0;
}