实现这么一个函数:传入一个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]={' '}; 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