zoukankan      html  css  js  c++  java
  • 用 C模拟面向对象思想

    自编题:任意给定两个字符串,比如"The UNIX.... " 和 "The only ...." 如何如下显示? 用纯C实现。

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define L 23
     4 #define C 80
     5 typedef struct{
     6     int l, c;  // lines, cols
     7 } pos_t;
     8 
     9 typedef struct {
    10     char *str;
    11     pos_t pos;
    12     int w, h; // the width and height of a recttangle
    13     void(*set)(void *);  // the way of display
    14 } str_obj;
    15 
    16 char buf[L][C];
    17 
    18 void init(void)
    19 {
    20     memset(buf, ' ', L*C);
    21 }
    22 void display(void)
    23 {
    24   buf[L][C] = 0;
    25   printf("%s", buf);
    26 }
    27 void set_pixel(int x, int y, char c)
    28 {
    29     if(y>0&&y<=L && x>0&&x<=C)
    30         buf[y-1][x-1] = c;
    31 }
    32 
    33 static void hor_line(int c, int l, int length)
    34 {
    35     set_pixel(c, l, '+');
    36     int i;
    37     for(i=c+1; i<length+c-1; i++)
    38         set_pixel(i, l, '-');
    39     set_pixel(i,l, '+');
    40 }
    41 
    42 static void ver_line(int c, int l, int length)
    43 {
    44     set_pixel(c, l, '+');
    45     int i;
    46     for(i=l+1; i<length+l-1; i++)
    47         set_pixel(c, i, '|');
    48     set_pixel(c, i, '+');
    49 }
    50 
    51 void print(void *obj) 
    52 {
    53     str_obj *p = obj;
    54     char *str = p->str;
    55     int x = p->pos.c, y = p->pos.l;
    56     int w = p->w, h = p->h;
    57     hor_line(x-2, y-1, w+4);
    58     ver_line(x-2, y-1, h+2);
    59     hor_line(x-2, y+h, w+4);
    60     ver_line(x+w+1, y-1, h+2);
    61     int i,j;
    62     int len = strlen(str), count = 0;
    63     for(i=0; i<h; i++){ 
    64         for(j=0; j<w; j++){
    65                 if(count < len ){
    66                     set_pixel(j+x,y+i, str[count++]);
    67                 }
    68         }
    69     }
    70 }
    71 
    72 int main(int argc, char **argv)
    73 {
    74 
    75     init();
    76     
    77     str_obj xstr = {
    78        "The UNIX operating system provides its services through "
    79        "a set of system calls, which are in effect functions wit"
    80        "hin the operating system that may be called by user prog"
    81        "rams. This chapter describes how to use some of the most"
    82        " important system calls from C programs.",
    83         {2,5}, 15,20, print
    84     };
    85  
    86         xstr.set(&xstr);
    87         xstr.pos.c += xstr.w+3;
    88         xstr.set(&xstr);
    89 
    90     str_obj ystr = {
    91         "The only way to learn a new programming language is by "
    92         "writing programs in it.",
    93         {5, 50}, 20, 5, print
    94     };
    95         ystr.set(&ystr);
    96         display();
    97     return 0;
    98 }
  • 相关阅读:
    HTML元素事件说明
    JQuery基本方法介绍和使用
    Eclipse设置注释模板
    AJAX回调(调用后台方法返回数据)
    Hibernate常用增删改查方法
    C memset
    PAT-Top1002. Business (35)
    PAT-Top1001. Battle Over Cities
    聂老师的考验(反向bfs)
    CSUST选拔赛题解
  • 原文地址:https://www.cnblogs.com/mathzzz/p/2592750.html
Copyright © 2011-2022 走看看