- 首先准备一个画布(str数组);然后先填充英文,遍历单词的每一个字母,第二重遍历每一行,第三重遍历每一列,注意是以 6 列为一组的,这样就可以容易找到对应关系了;然后填充单词中字母间的空格,首先枚举是第几列空格(i从1开始,这样的话很容易对应到第一个字母前面没有空格),第二重遍历第几行,这样就容易找到对应关系了
- 错误点:1、输入的字符串中可能有空格,这样是不可以用cin读入char的,读不进来,要用getline;2、使用getline前记得用getchar消除换行
#include <iostream>
using namespace std;
char g[26][7][6];
bool is_first = true;
void output(string word) {
if (word.empty()) return ;
if (is_first) is_first = false;
else cout << endl;
char str[7][60] = {0};
for (int i = 0; i < word.size(); ++ i) {
for (int j = 0; j < 7; ++ j) {
for (int k = 0; k < 5; ++ k) {
str[j][i * 6 + k] = g[word[i] - 'A'][j][k];
}
}
}
for (int i = 1; i < word.size(); ++ i) {
for (int j =0 ; j < 7; ++ j) {
str[j][i * 6 - 1] = ' ';
}
}
for (int i = 0; i < 7; ++ i)
cout << str[i] << endl;
}
int main() {
for (int i = 0; i < 26; ++ i)
for (int j = 0; j < 7; ++ j)
for (int k = 0; k < 5; ++ k)
cin >> g[i][j][k];
string word = "";
char ch;
while ((ch = getchar()) != -1) {
if ('A' <= ch && ch <= 'Z') word += ch;
else {
output(word);
word = "";
}
}
output(word);
}