AcWing 4276.擅长C

题目链接:4237.擅长C

思路

根据题意,每个单词的每个字母要按照矩阵输出,所以我们要思考:怎么找到每个单词?怎么让每个单词按照矩阵输出?
找单词:遇到大写字母就将其连接上word,否则输出单词,输出之后将word清空!
单词输出:一个单词最后输出都是7行,但是列就是每个字母顺序输出。每个字母都是5列+空列,所以我们用for循环,i表示单词字母下标,j表示行,k表示列,i6+k就可以表示出每个字母的字母区域,并且进行赋值,而空行就更容易了,就是i6-1(i从1开始),然后每个单词一行一行输出。
要注意换行的问题,第一个单词输出时开头没有换行,而后面的单词输出都有,所以设置一个全局布尔变量,保证第一个单词输出时没有换行。

AC代码

#include <iostream>
using namespace std;
char s[26][7][6];//例如a[1][2][3]意思是:字母B的第3行第4列对应的字母
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] = s[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++)
    cin >> s[i][j];
    char c;
    string word;
    while ((c = getchar()) != -1)
    {
        if (c >= 'A' && c <= 'Z') word +=c;
        else            //找到每个单词
        {
            output(word);
            word = "";//一个单词输出后,将word置为空,找新的单词
        }
    }
    output(word);//可能最后一个字符也是字母,所以while循环中没有输出最后一个单词,这里就是避免这个问题
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值