用C语言,写一个简单的行编辑程序代码,要求如下:输入一行字符串,用户在输入错误时可以用#和@进行修 正,其中#为退格符,@为退行符。要求输出修正后的字符串。要求使用到switch 要求用栈作为存储结构实现
时间: 2024-02-01 13:13:26 浏览: 81
以下是一个简单的行编辑程序代码,使用栈作为存储结构实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100 // 栈的最大容量
// 定义栈结构
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void InitStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int IsEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int IsFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
void Push(Stack *s, char c) {
if (IsFull(s)) {
printf("Stack overflow!\n");
exit(1);
}
s->data[++s->top] = c;
}
// 出栈
char Pop(Stack *s) {
if (IsEmpty(s)) {
printf("Stack underflow!\n");
exit(1);
}
return s->data[s->top--];
}
int main() {
Stack s; // 定义栈
char str[MAX_SIZE]; // 定义字符串
char c; // 存放输入的字符
int i, len; // i:循环变量,len:字符串长度
printf("Enter a string:\n");
fgets(str, MAX_SIZE, stdin); // 读入字符串
len = strlen(str);
InitStack(&s); // 初始化栈
for (i = 0; i < len; i++) {
c = str[i];
switch (c) {
case '#':
if (!IsEmpty(&s)) {
Pop(&s); // 退格符,出栈一个字符
}
break;
case '@':
while (!IsEmpty(&s)) {
Pop(&s); // 退行符,一直出栈直到栈为空
}
break;
default:
Push(&s, c); // 其他字符,入栈
}
}
printf("Edited string: ");
while (!IsEmpty(&s)) {
printf("%c", Pop(&s)); // 依次出栈并输出
}
printf("\n");
return 0;
}
```
在程序中,我们首先定义了一个栈结构,并实现了栈的初始化、判断是否为空、判断是否已满、入栈和出栈等基本操作。然后在主函数中,通过循环读入字符串中的每个字符,根据不同的字符进行相应的操作。如果是退格符,则出栈一个字符;如果是退行符,则一直出栈直到栈为空;否则,就将字符入栈。最后,依次出栈并输出栈中的字符,得到修正后的字符串。
阅读全文