sdut 1479 数据结构实验之栈与队列九:行编辑器
生活随笔
收集整理的這篇文章主要介紹了
sdut 1479 数据结构实验之栈与队列九:行编辑器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構實驗之棧與隊列九:行編輯器
Time Limit:?1000MS?Memory Limit:?65536KB Submit?Statistic?DiscussProblem Description
?一個簡單的行編輯程序的功能是:接受用戶從終端輸入的程序或數據,并存入用戶的數據區。?
?
由于用戶在終端上進行輸入時,不能保證不出差錯,因此,若在編輯程序中,“每接受一個字符即存入用戶數據區”的做法顯然不是最恰當的。較好的做法是,設立一個輸入緩沖區,用以接受用戶輸入的一行字符,然后逐行存入用戶數據區。允許用戶輸入出差錯,并在發現有誤時可以及時更正。例如,當用戶發現剛剛鍵入的一個字符是錯的時,可補進一個退格符"#",以表示前一個字符無效;?
?
如果發現當前鍵入的行內差錯較多或難以補救,則可以鍵入一個退行符"@",以表示當前行中的字符均無效。?
?
如果已經在行首繼續輸入'#'符號無效。?
Input
?輸入多行字符序列,行字符總數(包含退格符和退行符)不大于250。?
Output
?按照上述說明得到的輸出。?
Example Input
whli##ilr#e(s#*s) outcha@putchar(*s=#++);Example Output
while(*s) putchar(*s++); 轉載的兩個用棧思想做的http://www.cnblogs.com/luyingfeng/archive/2013/06/21/3149050.html #include<cstdio> #include<cstring> #include<stack> #include<algorithm> using namespace std; int main() {stack<char>q;char s[1000],s1[1000];while(scanf("%s",s)!=EOF){int len=strlen(s);for(int i=0; i<len; i++){if(s[i]!='#'&&s[i]!='@'){q.push(s[i]);}else if(s[i]=='#'&&!q.empty())q.pop();else if(s[i]=='@'){while(!q.empty()){q.pop();}}}int j=0;while(!q.empty()){s1[j++]=q.top();q.pop();}s1[j]='\0';for(int i=j-1; i>=0; i--)printf("%c",s1[i]);printf("\n");}return 0; } #include<stdio.h> #include<string.h> int main() {char ch[256] ;while(~scanf("%s",ch)){char sh[256] ;int top = -1 ;//底下用于判斷數組里是否是空int len = strlen(ch) ;for(int i = 0 ; i <= len-1 ; i++){if(ch[i]!='#'&&ch[i]!='@')sh[++top] = ch[i] ;else if(ch[i] == '#'&&top != -1)//判斷#前邊是否是無字符情況{sh[top--] ;}else if(ch[i] == '@'){/*while(top != -1)top-- ;//把存入數組里的字符全部清掉*/top--;}}for(int k =0 ; k<=top ; k++)printf("%c",sh[k]);printf("\n") ;}return 0 ; }總結
以上是生活随笔為你收集整理的sdut 1479 数据结构实验之栈与队列九:行编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sdut 1466 双向队列
- 下一篇: sdut 2087 离散事件模拟-银行管