试利用栈的基本操作编写一个行编辑程序,当前一个字符有误时,输入#消除,当前面一行有误时,输入@消除前面行的字符序列
2015-02-09 16:57
696 查看
头文件:函数的声明
函数的定义
函数的应用
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define STACKSIZE 100 typedef char ElemType; typedef struct { ElemType stack[STACKSIZE]; int top; }SeqStack; void InitStack(SeqStack *S);//初始化栈 int StackEmpty(SeqStack S);//判断栈是否为空 int GetTop(SeqStack S,ElemType *e);//取栈顶元素 int PushStack(SeqStack *S,ElemType e);//入栈 int PopStack(SeqStack *S,ElemType *e);//出栈 int StackLength(SeqStack S);//求栈长度 void ClearStack(SeqStack *S);//清空栈 void LineEdit();//行编辑函数
函数的定义
#include "行编辑函数.h" void InitStack(SeqStack *S)//将栈S初始化为空栈 { S->top = 0; } int StackEmpty(SeqStack S)//判断栈是否为空,栈为空返回1,否则返回0 { if(0 == S.top) { return 1; } else { return 0; } } int GetTop(SeqStack S,ElemType *e)//取栈顶元素,将栈顶元素值返回给e,并返回1表示成功,返回0表示失败 { if(S.top <= 0) { printf("栈已经空!\n"); return 0; } else { *e = S.stack[S.top-1];//取栈顶元素 return 1; } } int PushStack(SeqStack *S,ElemType e)//进栈操作 //将元素e进栈,元素进栈成功返回1,否则返回0 { if(S->top >= STACKSIZE-1) { printf("栈已满,不能入栈!"); return 0; } else { S->stack[S->top] = e; S->top++; return 1; } } int PopStack(SeqStack *S,ElemType *e)//出栈操作 { if(S->top <= 0) { printf("栈已经没有元素,不能出栈!\n"); return 0; } else { S->top--; *e = S->stack[S->top]; return 1; } } int StackLength(SeqStack S)//返回栈长度 { return S.top; } void ClearStack(SeqStack *S)//清空栈 { S->top = 0; } void LineEdit()//行编辑函数 { SeqStack S; char ch; ElemType e; ElemType a[50]; int i,j = 0; InitStack(&S); printf("输入字符序列(#表示前一个字符无效,@表示当前行字符无效).\n"); ch = getchar(); while(ch != '\n') { switch(ch) { case '#': if(!StackEmpty(S)) { PopStack(&S,&ch);//栈顶元素出栈 } break; case '@': ClearStack(&S);//清空栈 break; default: PushStack(&S,ch);//字符进栈 } ch = getchar();//读入下一个字符 } while(!StackEmpty(S)) { PopStack(&S,&e);//字符出栈并存入数组中 a[j++] = e; } for(i = j-1;i >= 0;i--) { printf("%c",a[i]);//输出正确的字符序列 } printf("\n"); ClearStack(&S);//为下一次输入做准备 }
函数的应用
#include "行编辑函数.h" int main(void) { LineEdit(); return 0; }
相关文章推荐
- 利用栈的基本操作编写一个行编辑程序,当前一个字符有误时,输入#消除,当前面一行有误时,输入@消除前面行的字符序列
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符。
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按下回车键时会产生换行符(/n)
- 编写一个程序,输入一行字符,以回车结束,分别统计出其中的英文字母、空格、数字和其他字符的数
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 练习1-24: 编写一个程序,查找C语言程序中的基本语法错误,如圆括号,方括号以及花括号不配对等。要正确的处理引号(包括单引号,双引号)~转移字符序列与注释(如果读者想把该程序编写成完全通用的程序,难度会比较大。)
- 【C语言】编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制。
- 用C语言编写一个包含链表的初始化、插入、删除、查找等基本操作的程序。
- 编写一个程序从标准输入读取字符,并把他们写到标准输出。除了大写字母转换成小写字母之外,其他的原样输出。
- 编写一个程序,从标准输入读入字符,并把它们写出在标准输出中。 所有非字母字符都完全按照它的输入形式输出,字母字符在输出前进行加密
- 编写一个程序从标准输入读取字符,并把他们写到标准输出。除了大写字母转换成小写字母之外,其他的原样输出。
- 编写一个程序从标准输入读取字符,并把他们写到标准输出,除了大写字母转换成小写字母之外,其他的原样输出。
- 编写一个程序读取输入,直到‘#’,并报告序列 ei 出现的次数
- 编写一个程序,从标准输入一行一行地读取文本,并完成如下任务:如果文件中有两行或更多行相邻的文本内容相同,那么就打印其中一行,其余行不打印。
- 编写一个程序,从标准输入读取字符,并把它们写到标准输出中。除了大写字母字符要转化为小写字母之外,所有字符的输出形式应该和他的输入形式完全相同
- 编写一个程序,输入一串不超过60个字符组成的且不包含换行符的字符串,将字符串中的A到Z的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度相同,并且要求只对A到Z的字母重新排列,其
- 2. 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使用让这个程序能够处理的输入行的长度没有限制
- 《c primer pius》第六章第14题,发现网上好多都有问题,编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中