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 }
  • 相关阅读:
    [InnoSetup]Inno Setup软件打包脚本
    inno setup 执行SQL
    用inno Setup制作web项目安装包
    Inno Setup执行SQL脚本的方法
    delphi的tserversocket控件如何接收16进制数
    Delphi 通信报Asynchronous socket error 10053错误的一个解决方法
    么正矩阵(酉矩阵)
    对称矩阵、Hermite矩阵、正交矩阵、酉矩阵、奇异矩阵、正规矩阵、幂等矩阵
    RSVP协议的基本概念介绍
    计算机顶级会议的历年最佳文章
  • 原文地址:https://www.cnblogs.com/mathzzz/p/2592750.html
Copyright © 2011-2022 走看看