今天有个同事也在思考简单的程序转换问题,我也想了个思路,也抵不住,自己也实现了一篇如下:
file: main.c
- /**
- * author: vincent.cws2008@gmail.com
- * history:
- * initial @ 2011-10-22
- */
- #include "stdio.h"
-
#include "malloc.h"
-
#include "string.h"
-
-
const char a[]={1,1,1,1,1,1,1,1,1};
-
const char b[]={2,2,2,2,2,2,2,2,2};
-
const char c[]={3,3,3,3,3,3,3,3,3};
-
const char d[]={4,4,4,4,4,4,4,4,4};
-
const char e[]={5,5,5,5,5,5,5,5,5};
-
-
const char *chars_table[]={a, b, c, d, e};
-
-
#ifndef __assert
-
#define __assert(x)
-
#else
-
#define __assert(x)
-
#endif
-
-
#ifndef NULL
-
#define NULL (void*)0
-
#endif
-
-
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
-
void display(const char* pbitmap, int width, int counts)
-
{
-
int i=0, j=0;
-
__assert(pbitmap);
-
printf("bitmap display:\n");
-
while(pbitmap[i]){
-
for (j=0; j<width*counts; j++){
-
printf("%d ", pbitmap[j]);
-
i++;
-
}
-
printf("\n");
-
}
-
}
-
-
bool chars2bitmap(int width, int high, const char* ptext, const char **ptable)
-
{
-
char *pbitmap=NULL;
-
int size=0,counts=0,pos=0;
-
int i=0, j=0, k=0;
-
__assert(ptext&&ptable);
-
counts = strlen(ptext);
-
size = counts*high*width;
-
pbitmap = (char*)malloc(size+1);
- __assert(pbitmap);
-
for(i=0,pos=0; i<high; i++) {
-
for (j=0; j<counts; j++){
-
for (k=0; k<width; k++){
-
pbitmap[pos++]=ptable[ptext[j]-'a'][k+i*width];
-
}
-
}
-
}
-
pbitmap[pos]='\0';
-
-
display(pbitmap, width, counts);
-
-
if (pbitmap) {
-
free(pbitmap);
-
pbitmap = NULL;
-
}
-
return true;
-
}
-
-
-
-
int main(int argc, char* argv[])
-
{
-
chars2bitmap(3, 3, "cabe", chars_table);
-
return 0;
-
}
简单测试了一下,还好能通过,没仔细查看,输出如下:
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO0AAABxCAIAAAC2i7PgAAAEBUlEQVR4nO3aUZKcOgyFYe9/VV5aHqZqimBLWBjZB+b/nm5oIcm2Qje3UgoAAAAAAAAAAAAAAAAAAAAAAAAAvEWt1f/UD9jl1NV8n/VgJg/2YI79zHiHG8emcNJ5PSisDmHM8bLMSPRzbO1Pw+7vxdpzSlKab3krVbeu3+qpopV8pu5InssbxxeFZ3SP+RQwcqUdZavcYF2nqDW1fpODdf1OrFFu/8gcL3V5/KEr/hPLCQjN8UhXg4/bpDnGagvmuP5vsO58n6U3zffW2/Zf7JnGBtlzbOVfM8ftRzee65epmOP9rGfMvSuhOfbrOkXbp6yfwbl3Zo6tTpzryFLj7+/H+N/bT8Ht6HRvceo6RbtddSesTX5jvd3+jx9ZrV6uCK+365ifrcuw/nUfmGMeunj3HId+DgHAMOuVaFf8713jwXnxgptjvXTuile0fXoE5+Z4r0K8SBvSdPZIp5NlJZjjx+jskU4ny0owx7OiX7XZ8UXvtHTiBQ9LjtRpiXSiGV/i/wM7O16IzmnpdJKd/Eb8skLM8Ww8nSjUYo5n40U6EWljV7k3zXE92B5fe3Tio/0/Hl/EzgsAAACAJM33huhLRlK84OZEXw2z4xVtnx7BuTneqxAv0oY0nT3S6WRZCeb4MTp7pNPJshLM8azoV212fNE7LZ14wcOSI3VaIp1oxhf+vZtD57R0OslOfiN+WSHmeDaeThRqMcez8SKdiLSxq9yb5rgebI+vPTrx0f4fjy9i5wUAAABAkuZ7Q/QlIylecHOir4bZ8Yq2T4/g3BzvVYgXaUOazh7pdLKsBHP8GJ090ulkWQnmeFb0qzY7vuidlk684GHJkTotkU404wv/3s2hc1o6nWQnvxG/rBBzPBtPJwq1mOPZeJFORNrYVe5Nc1wPtsfXHp34aP+Pxxex8wIAAMC78ZvviB/Bb8WxHX1njm+8L7/agjWqbaNaPylOi/z8mpnjb7Lm+Oc/us9p6/kdve601MZ3++km9Ku0OZ260fy1p/3Uac9J6Oex9sfqp5vZytOuuttPaGkPs/pzjrO7PGsNk2vr9uPUvSznNPxIfivGmYlH8jhj55drFxjdhxtLe561F4Nzac1ZN+dMe05dpz0roT/EM/lHko/kuRzi05XBObvMGd2HG/uToh6MNFQb7afWXTdaCp3T4JA5HXbXFcrfDfv2HDvzsI4zr6HrSfdmzHHpTbNzL3M8fn2bD8xxiTzvrQO+POzxA7scwdt/H5w8K+f4uBtvneNif++frvjX/ZbaEhlzXHrH46xisP9irDq6D6E8I/vTrT6exzoOZ98Qk719HA/SZT8GeMwgV/Z3Gd+VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwIv8A/w2a2aEq1tMAAAAAElFTkSuQmCC)
------------------------------------------------------------------------------------------
插个网上经常考试的题型:
- void *memcpyx(void *dest, const void*src, size_t n)
-
{
-
char *dest1 = dest;
- const char*src1 = src;
-
while(n--)
-
*dest1++ = *src++;
-
return dest;
-
}
-
-
void *memmovex(void *dest, const void *src, size_t count)
-
{
-
char *tmp;
-
const char *s;
-
-
if (dest <= src) {
-
tmp = dest;
-
s = src;
-
while (count--)
-
*tmp++ = *s++;
-
} else {
-
tmp = dest;
-
tmp += count;
-
s = src;
-
s += count;
-
while (count--)
-
*--tmp = *--s;
-
}
-
return dest;
-
}
阅读(1264) | 评论(0) | 转发(0) |