C++实现简易文本编辑器
实现简易文本编辑器
主要为大家详细介绍了C++实现简易文本编辑器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣
的小伙伴们可以参考一下
本文实例为大家分享了C++实现文本编辑器的具体代码,供大家参考,具体内容如下
1.简易文本编辑器
2.用链表实现,保存到文件中
#include
#include
#include
#include
#include
#include
using namespace std;
int NumberCount=0;//数字个数
int CharCount=0;//字母个数
int PunctuationCount=0;//标点符号个数
int BlankCount=0;//空白符个数
class Node
{
public:
string character;
int cursor;
int offset;
Node* next;
Node(){
cursor=0;//每行的光标初始位置
offset=0;//每行的初始偏移位置
next=NULL;
}
};
class TextEditor
{
private:
Node* head;
string name;
int line;//可更改的行数
int length;//行数
public:
TextEditor();
~TextEditor();
string GetName();
void SetName(string name);
int GetCursor();
int MoveCursor(int offset);
int SetCursor(int line,int offset);
void AddText(const string s);
void InsertText(int seat,string s);
int FindText(string s);
void DeleteText(string s);
int GetLine();
void Count();
friend ostream& operator<<(ostream& out,TextEditor &text);
Node* Gethead(){
return head;
}
//int GetLength()
//{
// return length;
// }
// int FindText(string s);
// void DeleteText(int seat,string s);
};
TextEditor::TextEditor()
{
head=NULL;
name="test";//文件初始名
//tail=NULL;
line=1;
length=0;
}
TextEditor::~TextEditor()
{
Node* p=head;
Node* q;
while(p!=NULL){
q=p->next;
delete p;
p=q;
}
}
int TextEditor::GetLine()
{
return line;
}
string TextEditor::GetName()
{
return name;
}
void TextEditor::SetName(string name)
{
this->name=name;
}
int TextEditor::GetCursor()
{
Node *p=head;
while(p->next!=NULL)
p=p->next;
return p->cursor;
}
int TextEditor::MoveCursor(int offset)
{
Node *p=head;
int i=1;
if(length+1
next!=NULL&&inext;
i++;
}
}
if(offset>p->character.length()){
cout<<"移动位置太大!"<cursor+=offset;
//cout<<"p ->cursor="<cursor<cursor;
}
int TextEditor::SetCursor(int line,int offset)
{
this->line=line;
//cout<<"line="<line<character=s;
p->next=NULL;
if(head==NULL)
head=p;
else{
while(q->next!=NULL)
q=q->next;
q->next=p;
}
length++;
// line++;
}
void TextEditor::InsertText(int seat,string s)
{
Node *p=head;
int i=1;
if(length+1
next!=NULL&&inext;
i++;
}
}
//MoveCursor(seat);
//cout<<"p->cursor="<cursor<character.length();i++)
substr+=p->character[i];
p->character.insert(p->cursor,s);
cout<<"substr="<cursor=0;//光标清零
}
ostream& operator<<(ostream& out,TextEditor &text)
{
int i=1;
Node* p=text.Gethead();
while(p!=NULL){
out<character<next;
}
// cout<<"length="<character.length();
while(q!=NULL){
p=0;
t=0;
tlen=q->character.length();
if(tlennext;
}
while(pcharacter[t]==P[p]){
t++;
p++;
}
else{
t=t-p+1;
p=0;
}
}
// cout<<"P="<=plen){
return t-plen+1;
}
else{
line++;
q=q->next;
}
}
return -1;
}
void TextEditor::DeleteText(string s)
{
Node *p=head;
int i=1;
int k=FindText(s);
if(k==-1)
cout<<"未出现该字符串!"<
next;
// cout<character<character.erase(k-1,s.length());
cout<<"删除成功!"<character.length();i++){
if(p->character[i]>='0'&&p->character[i]<='9')
NumberCount++;
else if(p->character[i]>'a'&&p->character[i]<'z'||p->character[i]>'A'&&p->character[i]<'Z')
CharCount++;
else if(ispunct(p->character[i]))
PunctuationCount++;
else if(p->character[i]==' ')
BlankCount++;
}
p=p->next;
}
}
int main()
{
int i,j,k,n=2;
string s,t,name;
TextEditor text;
cout<<"---------------------------------------"<>n;
getchar();
switch(n){
case 1: cout<<"请输入字符:"; getline(cin,s,'\n'); text.AddText(s); break;
case 2: cout<<"请输入文档名字:"; cin>>name; text.SetName(name); break;
case 3: cout< case 5:{
cout<<"输入行数:";
cin>>i;
cout<<"光标在第"<>j;
cout<<"输入插入字符:";
getchar();
getline(cin,s);
text.InsertText(text.SetCursor(i,j),s); break;
}
case 6: {
cout<<"输入查找的字符串:";
getline(cin,s);
int k=text.FindText(s);
if(k==-1)
cout<<"查找失败!"<character<next;
}
exit(0);
break;
}
default: cout<<"输入错误,请重新输入!"<