代码改变世界

c显示数字的LED(数字转LED)

  youxin  阅读(1105)  评论(0编辑  收藏  举报

实现这么一个函数:传入一个int,在屏幕输出类似LED显示屏效果的字母拼图,例如:

 输入1234567890,输出:

 请注意每个字符的固定宽度和高度,两个数字间保留一个空格

 函数名:void LEDprint(int num);

此题是表驱动方法的典型应用。

复制代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
//每个字符宽度为5,长度为7
string LEDarray[][7]={
    {" --- ", //0
     "|   |",
     "|   |",
     "|   |",
     "|   |",
     "|   |",
     " --- "},

    {"     ", //1
     "    |",
     "    |",
     "     ",
     "    |",
     "    |",
     "     "},

    {" --- ", // 2
    "    |",
    "    |",
    " --- ",
    "|    ",
    "|    ",
    " --- "},

   {" --- ",
    "    |",
    "    |",
    " --- ",
    "    |",
    "    |",
    " --- "},

   {"     ",
    "|   |",
    "|   |",
    " --- ",
    "    |",
    "    |",
    "     "},

   {" --- ",
    "|    ",
    "|    ",
    " --- ",
    "    |",  
    "    |",
    " --- "},

   {" --- ",
    "|    ",
    "|    ",
    " --- ",
    "|   |",
    "|   |",
    " --- "},

   {" --- ",
    "    |",
    "    |",
    "     ",
    "    |",
    "    |",
    "     "},

   {" --- ",
    "|   |",
    "|   |",
    " --- ",
    "|   |",
    "|   |",
    " --- "},

   {" --- ",
    "|   |",
    "|   |",
    " --- ",
    "    |",
    "    |",
    " --- "}
};
 
void LEDPrint(int num)
{
     if(num<0)
         return;
     char str[11]={'\0'};
     itoa(num,str,10);

     int len=strlen(str);
     string (*LED)[7]=new string[len][7];

     for(int i=0;i<len;i++)
     {
         int index=str[i]-'0';//重点在这里
         for(int j=0;j<7;j++)
         {
             LED[i][j]=LEDarray[index][j];
         }
     }
     
     for(int j=0;j<7;j++)
     {
         for(int i=0;i<len;i++)
         {
             cout<<LED[i][j]<<" ";
         }
         cout<<endl;
     }
     /*
      这里不能delete,因为后面的7,不能new出来的,
     for(int i=0;i<len;i++)
      delete[] LED[i];
        
    */
     delete[] LED;
}

        

int main()
{
    cout<<"input a number"<<endl;
    int num;
    while(cin>>num)
    {
        LEDPrint(num);
    }
    cout<<endl<<endl;
}
复制代码

唯一值得注意的地方是delete:

  只需delete[] LED即可。后面的7不是new出来的,如果delete程序会运行错误
还有一点

还有一点,char的大小为什么是:
char str[11]
因为int类型的最大的只有10位,我们开辟11就够了。
参考:http://blog.chinaunix.net/uid-27034868-id-3811600.html

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示