| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 967 人关注过本帖
标题:打印输出LCD样式的数字字符串
只看楼主 加入收藏
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
 问题点数:0 回复次数:0 
打印输出LCD样式的数字字符串
这是ZJUACM上的一道用于把数字显示成LCD样子的题目,题目链接:
      http://acm.zju.
      输入两个整数(用一个空格间隔),第一个整数n表示笔画大小,第二个是需要显示成LCD样子的数字。
      例如输入“2 01234”回车,则打印出笔画长度为2的01234,当输入“0 0”时,程序结束。
-------------------------------------【PRTLCD.C】--------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void PrintVer(int,int,char*);
void PrintHor(int,int,char*);
void PrintNumbers(int,char*);

/* --LCD的字型码--
 *
 *      -0-
 *    1     2
 *      -3-
 *    4     5
 *      -6-     
 *
 */


int LCDCODES[10][7]=
{
    {1,1,1,0,1,1,1}, /*0*/
    {0,0,1,0,0,1,0}, /*1*/
    {1,0,1,1,1,0,1}, /*2*/
    {1,0,1,1,0,1,1}, /*3*/
    {0,1,1,1,0,1,0}, /*4*/
    {1,1,0,1,0,1,1}, /*5*/
    {1,1,0,1,1,1,1}, /*6*/
    {1,0,1,0,0,1,0}, /*7*/
    {1,1,1,1,1,1,1}, /*8*/
    {1,1,1,1,0,1,1}  /*9*/
};

char c_ver='|';  /* 横线字符 */
char c_hor='-';  /* 竖线字符 */

/* 两个相邻字母中间隔了一个空列 ,因此平均每个字母占据n+3列,最后一列为间隔*/
/*打印竖直笔画,n-笔画长度,section=1或者4,numbers-数字字符串*/

void PrintVer(int n,int section,char *numbers)
{
    char *line;
    int i,len=(n+3)*strlen(numbers);
    line=(char*)malloc(len+1);
    if(line==NULL)
        return;
    memset(line,' ',len);
    for(i=0;i<strlen(numbers);i++)
    {
        if(LCDCODES[*(numbers+i)-'0'][section])
            *(line+(n+3)*i)=c_ver;
        if(LCDCODES[*(numbers+i)-'0'][section+1])
            *(line+(n+3)*i+(n+1))=c_ver;
    }

    /*检查最后一个字符,如果没有笔画,要使\0前移2格!*/
    line[len-1]='\0';
    /*打印n行*/
    for(i=0;i<n;i++)
        printf("%s\n",line);
    free(line);
}

/*打印水平笔画,n-笔画长度,section=0,3,or 6,numbers-数字字符串*/
void PrintHor(int n,int section,char *numbers)
{
    char *line;
    int i,len=(n+3)*strlen(numbers);
    line=(char*)malloc(len+1);
    if(line==NULL)
        return;
    memset(line,' ',len);

    for(i=0;i<strlen(numbers);i++)
    {
        if(LCDCODES[*(numbers+i)-'0'][section])
            memset((line+(n+3)*i+1),c_hor,n);
    }

    /*注意最后一个数字后面无需空格了!所以多缩进一个位置*/
    line[len-1]='\0';
    /*打印1行*/
    printf("%s\n",line);
    free(line);
}

/* Print A set of Numbers : "23456" e.g. */
void PrintNumbers(int n,char *numbers)
{
    PrintHor(n,0,numbers);    /*  ----   */
    PrintVer(n,1,numbers);    /* |    |  */
    PrintHor(n,3,numbers);    /*  ----   */
    PrintVer(n,4,numbers);    /* |    |  */
    PrintHor(n,6,numbers);    /*  ----   */
}

int main()
{
    char line[20];
    char *str1,*numbers,*delim=" ";
    int n;

    do
    {
        gets(line);
        str1=strtok(line,delim);
        numbers=strtok(NULL,delim);
        n=atoi(str1);
        if(n<=0)
            break;

        PrintNumbers(n,numbers);
        /*每两行数字之间有一个空行*/
        printf("\n");
    }
    while(1);
}
-------------------------------------【THE END】------------------------------------
/*----------------------------------------------------
 * 打印后正确的输出格式应该类似下面这样@表示行尾)
 * -       -   -       - @
 *| |   |   |   | | | |  @
 *         -   -   -   - @
 *| |   | |     |   |   |@
 * -       -   -       - @
 *------------------------------------------------------*/


[[it] 本帖最后由 hoodlum1980 于 2008-3-15 13:39 编辑 [/it]]
搜索更多相关主题的帖子: LCD 数字 字符 样式 打印 
2008-03-15 13:19
快速回复:打印输出LCD样式的数字字符串
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016992 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved