代码:
1、能过给的测试用例,12分
2、题干中说单词间以任何非大写英文字母分隔,说明有可能存在空格等,所以要使用读入一行getline(cin,str);
3、还要注意对于情况 ABC#AB# 、 ABC$$#AB# 和 ABC#AB 的处理
#include<iostream>
#include<map>
#include<vector>
using namespace std;
string a[183];
vector<int> v1,v2;
int main() {
string str;
for(int i=1; i<=182; i++)
cin>>a[i];
getchar();
getline(cin,str); // 注意要使用这个 *
int flag=0;
/*eg. 输入 ABCDEF&AB!!#DER$KB,将其存成ABCDEF0AB0DER0KB0,
注意把大写字母以外的符号存成0 */
for(int i=0; i<str.size(); i++) {
if(str[i]<='Z'&&str[i]>='A') {
// 记录每一个字母的图形的第一行所存放的位置
v1.push_back((str[i]-'A')*7+1);
flag=1;
} else {
if(flag==1) v1.push_back(0);
flag=0;
}
}
if(flag==1) v1.push_back(0);
for(int i=0; i<v1.size(); i++) {
if(v1[i]==0) v2.push_back(i);
}
int n=0,j=0;
for(int i=0; i<v2.size(); i++) {
int k=0;
if(i) cout<<endl;
while(k<7) {
int cnt=0,q=j;
for(q; q<v2[i]; q++) {
if(cnt) cout<<" ";
cout<<a[v1[q]+k];
cnt++;
}
cout<<endl;
k++;
}
j=v2[i]+1;
}
return 0;
}
复杂而不难,看了别人的代码之后,我感觉自己的数据结构定义的不合理,应该使用 string[26][7] 存放26个英文字母的图案