Chinaunix首页 | 论坛 | 博客
  • 博客访问: 943910
  • 博文数量: 116
  • 博客积分: 3923
  • 博客等级: 中校
  • 技术积分: 1337
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-23 01:22
文章分类

全部博文(116)

文章存档

2013年(1)

2012年(17)

2011年(69)

2009年(29)

分类: LINUX

2011-10-22 21:48:19

今天有个同事也在思考简单的程序转换问题,我也想了个思路,也抵不住,自己也实现了一篇如下:

file: main.c

  1. /**
  2.  * author: vincent.cws2008@gmail.com
  3.  * history:
  4.  * initial @ 2011-10-22
  5.  */

  6. #include "stdio.h"
  7. #include "malloc.h"
  8. #include "string.h"

  9. const char a[]={1,1,1,1,1,1,1,1,1};
  10. const char b[]={2,2,2,2,2,2,2,2,2};
  11. const char c[]={3,3,3,3,3,3,3,3,3};
  12. const char d[]={4,4,4,4,4,4,4,4,4};
  13. const char e[]={5,5,5,5,5,5,5,5,5};

  14. const char *chars_table[]={a, b, c, d, e};

  15. #ifndef __assert
  16. #define __assert(x)
  17. #else
  18. #define __assert(x)
  19. #endif

  20. #ifndef NULL
  21. #define NULL (void*)0
  22. #endif

  23. #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))

  24. void display(const char* pbitmap, int width, int counts)
  25. {
  26.     int i=0, j=0;
  27.     __assert(pbitmap);
  28.     printf("bitmap display:\n");
  29.     while(pbitmap[i]){
  30.         for (j=0; j<width*counts; j++){
  31.             printf("%d ", pbitmap[j]);
  32.             i++;
  33.         }
  34.         printf("\n");
  35.     }
  36. }

  37. bool chars2bitmap(int width, int high, const char* ptext, const char **ptable)
  38. {
  39.     char *pbitmap=NULL;
  40.     int size=0,counts=0,pos=0;
  41.     int i=0, j=0, k=0;
  42.     __assert(ptext&&ptable);
  43.     counts = strlen(ptext);
  44.     size = counts*high*width;
  45.     pbitmap = (char*)malloc(size+1);
  46.     __assert(pbitmap);
  47.     for(i=0,pos=0; i<high; i++) {
  48.         for (j=0; j<counts; j++){
  49.             for (k=0; k<width; k++){
  50.                 pbitmap[pos++]=ptable[ptext[j]-'a'][k+i*width];
  51.             }
  52.         }
  53.     }
  54.     pbitmap[pos]='\0';

  55.     display(pbitmap, width, counts);

  56.     if (pbitmap) {
  57.         free(pbitmap);
  58.         pbitmap = NULL;
  59.     }
  60.     return true;
  61. }



  62. int main(int argc, char* argv[])
  63. {
  64.     chars2bitmap(3, 3, "cabe", chars_table);
  65.     return 0;
  66. }

简单测试了一下,还好能通过,没仔细查看,输出如下:




------------------------------------------------------------------------------------------

插个网上经常考试的题型:
  1. void *memcpyx(void *dest, const void*src, size_t n)
  2. {
  3.     char *dest1 = dest;
  4.     const char*src1 = src;
  5.     while(n--)
  6.         *dest1++ = *src++;
  7.     return dest;
  8. }

  9. void *memmovex(void *dest, const void *src, size_t count)
  10. {
  11.     char *tmp;
  12.     const char *s;
  13.     
  14.     if (dest <= src) {
  15.         tmp = dest;
  16.         s = src;
  17.         while (count--)
  18.             *tmp++ = *s++;
  19.     } else {
  20.         tmp = dest;
  21.         tmp += count;
  22.         s = src;
  23.         s += count;
  24.         while (count--)
  25.             *--tmp = *--s;
  26.     }
  27.     return dest;
  28. }


阅读(1200) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~