题目分析
- 使用一个26x7x5的三维数组保存字母表
- 使用一个动态二维数组board表示输出面板,根据输入取对应的7x5 插入board
- 除第一个外,每插入一个字母,需要插入一列空格
- 换行后需要插入一行换行符
代码
//得分:16
#include <cstdio>
#include<cstring>
#include <vector>
#include<set>
#include<iostream>
using namespace std;
char alphabet[27][8][6];
vector<vector<char>> board;
void insert_space(int y) {
for (int i = y; i < y + 7; i++) {
board[i].push_back(' ');
}
}
void insert_char(int y,int x,char c) {
if (x == 0) {
for (int i = y; i < y + 7; i++) {
vector<char> tmp;
board.push_back(tmp);
}
}
int n = c - 'A';
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 5; j++) {
board[y+i].push_back(alphabet[n][i][j]);
}
}
}
void insert_new_line(int y) {
vector<char> tmp;
board.push_back(tmp);
}
void print_board() {
for (int i = 0; i < board.size(); i++) {
for (int j = 0; j < board[i].size(); j++) {
cout.put(board[i][j]);
}
if(i != board.size()-1)
cout.put('\n');
}
}
int main()
{
char c;
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 7; j++) {
int k = 0;
while ((c = cin.get()) != '\n'&& k<5) {
alphabet[i][j][k] = c;
k++;
}
}
}
int y=0, x=0;
while ((c=cin.get()) != '\n') {
int t = c - 'A';
if (t >= 0 && t < 26) {
if (x != 0) {
insert_space(y);
x += 1;
}
insert_char(y, x, c);
x += 5;
}
else {
insert_new_line(y);
y +=8;
x = 0;
}
}
print_board();
return 0;
}