1. 程式人生 > >行編輯程式(棧和佇列)

行編輯程式(棧和佇列)

題目描述

一個簡單的行編輯程式的功能是:接受使用者從終端輸入的程式或資料,並存入使用者的資料區。答應使用者輸入出錯時可以及時更正。可以約定#為退格符,以表示前一個字元無效,@為退行符,表示當前行所有字元均無效。
輸出更正後的程式。

輸入

whli##ilr#e(s#*s)

輸出

while(*s)

樣例輸入 Copy

[email protected](*s=#++)

樣例輸出 Copy

putchar(*s++)

分析:

本題的話也是簡單的佇列應用。通過不斷的改遍Q.rear的值達到目的。要注意的是有可能會是Q.rear的值小於0,如果小於0,則要改成0。小於0的情況為第一個遇到#。

#include"stdio.h"
#include"string.h"
typedef struct {
 char data[1000];
 int front;
 int rear;
}SqQueue;
SqQueue Q;
int main()
{
    char a[100];
    int i,j,k,l;
    while(~scanf("%s",a))
    {
        Q.front=0;
        Q.rear=0;
        l=strlen(a);
        i=0;
        while(i<l)
        {
            Q.data[Q.rear++]=a[i];
            if(a[i]=='#')
                Q.rear=Q.rear-2;
            if(Q.rear<0)
                Q.rear=0;
            if(a[i]=='@')
                Q.rear=0;
            i++;
        }
        Q.data[Q.rear]='\0';
            printf("%s\n",Q.data);



    }
}