编写一个可以将用户输入字母,转换输出成图像的函数。
使用三维数组来制定字母模板,其中一维代表字母,二维和三维按照每个字母的笔记,着色部分使用1标识,空白部分使用0表示。
另外,本实例涉及到了字符编码相关的知识,对于ASCII码,其国际标准为ISO/IEC 646:1991
该标准在国际标准化组织官网的链接地址为:《ISO/IEC 646:1991》(注意:要给钱才能下载)
不要钱的看这里:《百度百科:ASCII》(自:《计算机应用基础教程》莫绍强、陈善国:中国铁道出版社,2012年)
//
// Created by crazy_pig on 2022/8/31.
// References from : https://www.runoob.com/cprogramming/c-100-examples.html
//
#include "../include/L6.h"
// ascii码表小写字母a起始位置
#define ASCII_START_POS 97
// 英文字母个数
#define ALPHA_COUNT 3
// 字符图像宽度
#define WIDTH 8
// 字符图像高度
#define HEIGHT 8
// 大写字母ASCII码表起始位置
#define UPPER_START 65
// 大写字母ASCII码表起始位置
#define UPPER_END 90
// 小写字母ASCII码表起始位置
#define LOWER_START 97
// 小写字母ASCII码表起始位置
#define LOWER_END 122
// 小写字母和大写字母在ASCII码表的位置偏移量
#define UPPER_LOWER_OFFSET 32
const int char_def[ALPHA_COUNT][WIDTH][HEIGHT] = {
{{0, 0, 1, 1, 1, 1, 0, 0},//A
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 0, 0, 0, 0, 1, 1},
{1, 1, 0, 0, 0, 0, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 0, 0, 0, 0, 1, 1},
{1, 1, 0, 0, 0, 0, 1, 1}},
{{1, 1, 1, 1, 1, 1, 0, 0},//B
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 0, 0, 0, 0, 1, 1},
{1, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 0, 0, 0, 0, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 0, 0}},
{{0, 0, 1, 1, 1, 1, 0, 0},//C
{0, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 0, 0, 0, 0, 1, 1},
{1, 1, 0, 0, 0, 0, 0, 0},
{1, 1, 0, 0, 0, 0, 0, 0},
{1, 1, 0, 0, 0, 0, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 0, 0}}};
/**
* 题目:用*号输出字母C的图案。
* 程序分析:可先用'*'号在纸上写出字母C,再分行输出。
*/
void L6() {
// 升级一下,编写一个可以将用户输入字母,转换输出成图像的函数
// 思路:使用三维数组来制定字母模板,其中一维代表字母,二维和三维按照每个字母的笔记,着色部分使用1标识,空白部分使用0表示
char c;
printf("请输入要转换图像字母:\n");
scanf("%s", &c);
// 输入大写转小写,方便统一处理
if (((int) c) >= UPPER_START && ((int) c) <= UPPER_END) {
c += UPPER_LOWER_OFFSET;
}
// 校验合法性
if (((int) c) < LOWER_START || ((int) c) > LOWER_END) {
printf("目前只能处理26个字母,请勿输入其它字符!");
} else {
// 找到对应字母的字迹索引
int char_index = (int) c - ASCII_START_POS;
for (int w = 0; w < WIDTH; w++) {
for (int h = 0; h < HEIGHT; h++) {
// 根据着色定义选择打印字迹或打印空白
printf(char_def[char_index][w][h] > 0 ? "*" : " ");
}
printf("\n");
}
}
}