Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474977
  • 博文数量: 112
  • 博客积分: 2436
  • 博客等级: 大尉
  • 技术积分: 2769
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-04 19:48
文章分类

全部博文(112)

文章存档

2013年(7)

2012年(105)

分类: C/C++

2012-03-22 14:47:43


点击(此处)折叠或打开

  1. #Makefile 练习

  2. all:
  3.     gcc -Wall stack.c -c -o stack.o
  4.     ar rcs libstack.a stack.c
  5.     gcc main.c -L. -lstack -o app_static
  6.     gcc -shared -fPIC stack.c -o libstack.so
  7.     gcc main.c libstack.so -o main
  8. clean:
  9.     rm main
  10. .PHONY:clean all

点击(此处)折叠或打开

  1. //stack.h

  2. #ifndef STACK_H
  3. #define STACK_H

  4. #define MAX 20
  5. #include <stdbool.h>
  6. typedef struct stack
  7. {
  8.     char arr[MAX];
  9.     int top;
  10. }stack_t;

  11. bool is_character(char);
  12. bool is_num(char);
  13. void stack_init(stack_t *);
  14. void push(stack_t *, char);
  15. char pop(stack_t *);
  16. bool is_empty(stack_t *);
  17. bool is_full(stack_t *);

  18. #endif //STACK_H

点击(此处)折叠或打开

  1. //stack.c

  2. #include "stack.h"
  3. #include <string.h>

  4. bool is_character(char ch)
  5. {
  6.     if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
  7.         return true;
  8.     else
  9.         return false;
  10. }

  11. void stack_init(stack_t *st)
  12. {
  13.     memset(st, 0, sizeof(stack_t));
  14. }

  15. void push(stack_t *st, char ch)
  16. {
  17.     st->arr[st->top ++] = ch;
  18. }

  19. char pop(stack_t *st)
  20. {
  21.     return st->arr[-- st->top];
  22. }

  23. bool is_empty(stack_t *st)
  24. {
  25.     return st->top == 0;
  26. }

  27. bool is_full(stack_t *st)
  28. {
  29.     return st->top == MAX;
  30. }

点击(此处)折叠或打开

  1. //main.c

  2. #include <stdio.h>
  3. #include "stack.h"

  4. int main(int argc, const char *argv[])
  5. {
  6.     char ch;
  7.     stack_t st_ch, st_num;

  8.     stack_init(&st_ch);
  9.     stack_init(&st_num);

  10.     while((ch = getchar()) != '\n')
  11.     {
  12.         if(is_character(ch))
  13.         { if(! is_full(&st_ch))
  14.                 push(&st_ch, ch);
  15.         }
  16.         else
  17.         {
  18.             if(! is_full(&st_num))
  19.                 push(&st_num, ch);
  20.         }
  21.     }

  22.     while(! is_empty(&st_ch))
  23.         putchar(pop(&st_ch));
  24.     putchar('\n');
  25.     while(! is_empty(&st_num))
  26.         putchar(pop(&st_num));
  27.     putchar('\n');
  28.     return 0;
  29. }

阅读(1192) | 评论(0) | 转发(2) |
0

上一篇:回调函数 _0302

下一篇:动态库的生成 _0303

给主人留下些什么吧!~~