解题思路:
①:输入字符串,将字符串中字符逐个入栈
②:入栈时,非'#' 和非'@'字符入栈,遇到'#'字符,出栈前一个入栈字符,遇到'@'字符,前面所有已入栈的字符出栈,即栈置空
③:自栈底到栈顶,依次输出字符
参考代码:
#include<stdio.h> #include<string.h> typedef struct Stack_{ char data[201]; int top; /*栈顶指针*/ int base; /*栈底指针*/ }*Stack,STACK; void init(Stack s); void push_s(Stack s,char c); void pop_s(Stack s,char *e); int stack_empty(Stack s); int main() { char e,input_[201]; STACK s; while(gets(input_)!=NULL) { init(&s); for(int i=0;i<strlen(input_);i++) { if(input_[i]=='#') pop_s(&s,&e); else if(input_[i]=='@') init(&s); else push_s(&s,input_[i]); } /*输出,从栈底base向上到栈顶结束*/ while(s.base!=s.top) printf("%c",s.data[s.base++]); printf("\n"); } return 0; } /*========================================*/ void init(Stack s) { s->top=0; s->base=0; } /*========================================*/ void push_s(Stack s,char c) { s->data[s->top++]=c; } /*========================================*/ void pop_s(Stack s,char *e) { (*e)=s->data[--s->top]; } /*========================================*/ int stack_empty(Stack s) { if(s->top==0) return 1; else return 0; } /*========================================*/
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:745 |
C语言训练-计算1977!* (C语言代码)浏览:941 |
C二级辅导-计负均正 (C语言代码)浏览:652 |
Biggest Number (C++代码)回溯法浏览:1678 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:581 |
字符串对比 (C语言代码)浏览:1471 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1072 |
C语言训练-阶乘和数* (C语言代码)-------- 呆板写法浏览:1397 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:942 |
剪刀石头布 (C语言代码)浏览:1792 |