c++如何将输入的字符转为字符画

就是输入一个字符,如何使用‘*’这个符号将输入的字符画出来... 就是输入一个字符,如何使用‘*’这个符号将输入的字符画出来 展开
 我来答
xoaxa
推荐于2016-01-16 · TA获得超过8608个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3441万
展开全部
/***********************************
C 程序得到汉字字模信息
***********************************/
#include <stdio.h>
#include <stdlib.h>

/********************************** 
得到英文字符的字模信息,存入数组
参数:
c:要得到字模信息的字符指针
buffer[]:存储得到字模信息的数组
无返回值
***********************************/
void getAscCode(char *c,char buff[]) {
unsigned long offset;
FILE *ASC;/* 打开字库文件asc16 */
if((ASC = fopen("asc16","rb")) == NULL) {
        printf("Can't open asc,Please add it\n");
        getchar();
        exit(0);
}
offset = *(c) * 16 + 1; /* 通过ascii码算出偏移量 */
fseek(ASC,offset,SEEK_SET);/* 将文件指针移动到偏移量的位置 */
fread(buff,16,1,ASC); /* 从偏移量的位置读取32个字节 */
printf("ASCII:%d,offset:%d \n\r",*c,offset);
}

/**********************************
功能:显示汉字串,每个以16×16格式。 
参数:Hz:待显示的汉字串
      c1:前景字符串
      c2:背景字符串
返回值:无
***********************************/
void ShowHz(char *Hz,char *c1,char *c2) {
unsigned char qh,wh;
unsigned long offset;
char buff[32];
int i,j,k,m;
FILE *HZK;
/* 打开字库文件hzk16 */
if((HZK = fopen("hzk16","rb")) == NULL) {
printf("Can't open haz16,Please add it\n");
getchar();
exit(0);
}
for(m = 0; Hz[m]; m += 2) {
/* 区码 = 内码(高字节) - 160 位码 = 内码(低字节) - 160 */
qh = Hz[m] - 0XA0;/* 获取区码 */
wh = Hz[m + 1] - 0XA0;/* 获取位码 */
offset = (94 * (qh - 1) + (wh - 1)) * 32L;/* 获取该汉字在字库中偏移量 */
fseek(HZK,offset,SEEK_SET);/* 将文件指针移动到偏移量的位置 */
fread(buff,32,1,HZK);/* 从当前位置读取32个字节 */
for(i = 0;i < 16;i++) { /* 16×16点阵汉字,一共有16行 */
for(j = 0;j < 2;j++) { /* 横向有2个字节,循环判断每个字节 */
for(k = 0;k < 8;k++) { /* 每个字节有8位,循环判断每位是否为1 */
if(buff[2 * i + j] & (0x80 >> k)) /* 测试当前位是否为1 */
printf("%s",c1);/* 为1的显示为字符c1 */
else printf("%s",c2);/* 为0的显示为字符c2 */
}
}
printf("\n");/* 显示一行以后,换新行 */
}
printf("\n");/* 每个汉字间有一个空行 */
}
fclose(HZK);
}

/*****************************************
根据字模信息输出英文字符参数
mat:字模指针(一个半角字符点阵信息)
c1:字模中为1的点显示的字符,也就是前景字符
c2:字模中为0的点显示的字符,也就是背景字符
无返回值
******************************************/
void printAscChar(char *mat,char *c1,char *c2) {
int i,j;
for(i = 0;i < 16;i++) { /* 8x16的点阵,一共有16行 */
for(j = 0;j < 8;j++)/* 横向一个字节8位,依次判断每位是否为0 */
if(mat[i] & (0x80 >> j))/* 测试当前位是否为1 */
printf("%s",c1);/* 为1的显示为字符c1 */
else printf("%s",c2);/* 为0的显示为字符c2 */
printf("\n");/* 输完一行以后,进行换行 */
}
}

/******************************************
根据字模信息输汉字字符?参数:
mat:字模指针(一个全角字符或汉字信息)
c1:字模中为1的点显示的字符,也就是前景字符
c2:字模中为0的点显示的字符,也就是背景字符
无返回值?
*******************************************/
void printHzKChar(char *mat,char *c1,char *c2) {
int i,j,k;
for(i = 0;i < 16;i++) { /* 16x16点阵汉字,一共有16行 */
for(j = 0;j < 2;j++) { /* 横向有2个字节,循环判断每个字节的 */
for(k = 0;k < 8;k++) { /*每个字节有8位,循环判断每位是否为1 */
if(mat[2 * i + j] & (0x80 >> k)) /* 测试当前位是否为1 */
printf("%s",c1);/* 为1的显示为字符c1 */
else printf("%s",c2);/* 为0的显示为字符c2 */
}
}
printf("\n");/* 输完一行以后,进行换行 */
}
}

/********************************** * 主函数  ***********************************/
int main() {
char *CnStr  = "网络";
/* 汉字占两个字节,前景字符和背景字符都要有两个英文字符或一个中文字符,否则字体将变形 */
char *prospect = "*";
char *background = " "; 
ShowHz(CnStr,prospect,background);
return 0;
}
追问

出来这个

追答

你需要下载字库ASC16和HZk16到缺省目录下,当然一定是解压过的。以下是运行结果。

zhudongfangshi
推荐于2016-05-29 · TA获得超过202个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:97.3万
展开全部
除非有现成的库函数,否则你这个想法很难实现。

以我的经验,可能可行的方法是:将字符作为一个图片输入,然后以图像处理的方式识别里面黑色的像素点,然后在相应的位置上绘制星号。
不过这样和你的预想就不大一样了是吧?
追问
这样的话要这么做,能具体说说吗
其实我就是想输出四个中文,但是一个一个字符打太麻烦了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jkla139
2013-11-18 · TA获得超过619个赞
知道小有建树答主
回答量:347
采纳率:100%
帮助的人:250万
展开全部
用一个n*n方阵,0代表空,1代表*,这个方阵看起来像某个字符,如果你输入了这个字符,那就输出这个方阵,遇到0输入空格,遇到1输入*,这个方阵是要自己做的,这将会是个巨大的工程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-18
展开全部
http://zhidao.baidu.com/question/562934881.html

参考一下我这个回答里面的程序?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式