时间限制: 1 Sec 内存限制: 128 MB
提交: 2873 解决: 1337
[提交][状态][讨论版]
请编程从字模文件ASC10x8.dic中读取指定字符串中ASCII字符的点阵字模并用“#”显示在屏幕上。
字模文件中存放了0x20到0x7E共95个ASCII字符的点阵字模数据,每个ASCII字符对应10个字节,如:
A的字模数据(ASCII值为0x41,字模数据在文件中的偏移量为(0x41-0x20)*10=330)为:0x00,0x00,0x20,0x20,0x30,0x50,0x50,0x78,0x48,0xCC
~~~~~~~~ //0x00(以下用~示意空格)
~~~~~~~~ //0x00
~~#~~~~~ //0x20
~~#~~~~~ //0x20
~~##~~~~ //0x30
~#~#~~~~ //0x50
~#~#~~~~ //0x50
~####~~~ //0x78
~#~~#~~~ //0x48
#~#~#~#~ //0xCC
字模文件为二进制文件,本地调试时可从这里下载。
待输出字符串,仅包含英文ASCII字符,长度不超过20个字符。
字符串对应的字模点阵信息
ABC
# #### ####
# # # # #
## # # #
# # ### #
# # # # #
#### # # #
# # # # # #
# # # # #### ###
在程序需要当前下使用名为"ASC10x8.dic"的字模文件,注意文件名大小写,并以二进制方式打开。
- #define _CRT_SECURE_NO_WARNINGS
- #include
- #include
- #include
- #include
- #include
-
-
- int main() {
- FILE* fp = fopen("ASC10x8.dic", "rb");
-
- int i, j,k;
-
- char s[20] = { 0 };
- fgets(s, 20, stdin);
-
- char* p = s;
-
- // 申请动态二维数组
- int length = strlen(s);
- s[length - 1] = '\0';
- length = strlen(s);
- unsigned char** arr = (unsigned char**)calloc(10, sizeof(unsigned char*));
- for (i = 0; i < 10; i++) {
- arr[i] = (unsigned char*)calloc(length, 1);
- }
- // 将二进制文件放进二位数组
- for (i = 0; i < length; i++) {
- for (j = 0; j < 10; j++) {
- int pian_yi = (*(p+i) - 32) * 10;
- fseek(fp, pian_yi+j, SEEK_SET);
- fread(&arr[j][i], 1, 1, fp);
- }
- }
- // 将二进制文件打印出来
- for (i = 0; i < 10; i++) {
- for (j = 0; j < length; j++) {
- int arr_bool_[8] = { 0 };
- int bit = 7;
- while (bit >= 0) {
- arr_bool_[bit] = arr[i][j] % 2;
- arr[i][j] >>= 1;
- bit--;
- }
- for (k = 0; k < 8; k++) {
- if (arr_bool_[k] == 0) {
- printf(" ");
- }
- else
- {
- printf("#");
- }
- }
- }
- printf("\n");
- }
- fclose(fp);
-
- return 0;
- }
-
-