c显示数字的LED(数字转LED)
2013-08-26 01:03 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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最大的设计失误
· 单元测试从入门到精通