description
這些日子,可可不和卡卡一起玩了,原來可可正廢寢忘食的想做乙個簡單而高效的文字編輯器。你能幫助他嗎?為了明確任務目標,可可對「文字編輯器」做了乙個抽象的定義:
文字:由0個或多個字元構成的序列。這些字元的ascii碼在閉區間[32, 126]內,也就是說,這些字元均為可見字元或空格。
游標:在一段文字中用於指示位置的標記,可以位於文字的第乙個字元之前,文字的最後乙個字元之後或文字的某兩個相鄰字元之間。
文字編輯器:為乙個可以對一段文字和該文字中的乙個游標進行如下七條操作的程式。如果這段文字為空,我們就說這個文字編輯器是空的。
編寫乙個程式: 建立乙個空的文字編輯器。 從輸入檔案中讀入一些操作指令並執行。 對所有執行過的get操作,將指定的內容寫入輸出檔案。
input
輸入檔案中第一行是指令條數n,以下是需要執行的n個操作。除了回車符之外,輸入檔案的所有字元的ascii碼都在閉區間[32, 126]內。且行尾沒有空格。
output
依次對應輸入檔案中每條get指令的輸出,不得有任何多餘的字元。
sample input
10insert 13
balanced eert
move 2
delete 5
next
insert 7
editor
move 0
getmove 11
rotate 4
getsample outputbt
hint
對輸入資料我們有如下假定: move操作不超過50 000個,insert、delete和rotate操作作的總個數不超過6 000,get操作不超過20 000個,prev和next操作的總個數不超過20 000。 所有insert插入的字元數之和不超過2m(1m=1 024*1 024)。 delete操作、rotate操作和get操作執行時游標後必然有足夠的字元。move、prev、next操作不會把游標移動到非法位置。 輸入檔案沒有錯誤。
首先我們需要寫出一道前置題[noi2003]editor,然後這題牽涉到翻轉子串,那樣我們開兩個rope,乙個正的,乙個反的,然後翻轉就成了交換子串了,對吧?
/*program from wolfycz*/
#include#include#include#include#include#include#define inf 0x7f7f7f7f
using namespace std;
using namespace __gnu_cxx;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read()
inline void print(int x)
crope rop1,rop2;
const int n=2.1e6;
char s[n+10],t[n+10],type[10];
int main()
s[x]=0;
rop1.insert(pos,s);
reverse(s,s+x);
rop2.insert(len-pos,s);
} if (type[0]=='d')
if (type[0]=='r')
if (type[0]=='g') printf("%c\n",rop1.at(pos));
if (type[0]=='p') pos--;
if (type[0]=='n') pos++;
} return 0;
}
Linux文字編輯器ed
功能說明 文字編輯器。語 法 ed gs p 字串 help version 檔案 補充說明 ed 編輯器是 linux 作業系統下最簡單的文字編輯器。它是以行為單位對檔案進行編輯的編輯器,而不像 ms dos 系統下的 edit 那樣是以整個螢幕框架為單位對檔案進行編輯的。因此,如果你已經習慣了使...
3 文字編輯器vim
2 vim沒有選單,只有命令。一般寫一些配置檔案,或者小指令碼的時候使用。3 vim工作模式 插入命令 命令 作用 a 在游標所在字元後插入 a 在游標所在行尾插入 i 在游標所在字元前插入 i 在游標所在行行首插入 o 在游標下插入新行 o 在游標上插入新行 定位命令 命令 作用 set nu 設...
命令(三) 文字編輯器應用
一,vi 純文字編輯器 內部操作 1 vimtutor命令可以看它的操作方法 2 ctrl u向檔案頭翻半屏,ctrl d 往檔案尾翻半屏,ctrl f 往檔案尾翻一屏,ctrl b 往檔案首翻一屏 3 esc從編輯模式到命令模式 4 行號跳到指定的行 5 dd,ndd命令模式下刪除行 6 p或者p...