文本编辑器C代码
文本编辑器C++代码

#include<iostream>#include<string>using namespace std;int *get_next(char*T,int*next);//声明get_next函数以获取next数组int KMP(char*S,char*T);//声明KMP函数调用next函数来进行查找int get_choice();//选择要执行的功能void serach(string S);//定义查找函数void add_char(string &S);//定义添加函数void change(string &S);//定义替换函数void delete_char(string &S);//定义删除函数void display(string &S);//显示函数,用于显示当前的字符串int *get_next(const char*T,int *next){int i = 0,j = -1;int length = strlen(T); //根据T字符串将所得到的next数组值存在next指针指向数组中int *temp = next;*next = -1;while(i < length){if(j == -1||*(T+i)){i++;//如果字符串中第i个字符与从头起第j个相同,则i,j分别向后移一位j++;if(*(T+i)!=*(T+j))*(next+i) = j;//当遇到第一个不相同的字符时,当前的j值就是next数组第i个元素的值else*(next+i) = *(next+j);//如果相同,则从字符串开始第j个元素的next值与当前位置的值相同}elsej = *(next+j);//如果遇到第i个元素和从头起的第j个元素不相同,则从第j个元素的next值的位置回溯}return temp;}int KMP(string S,string T){int S_Length = S.length();int T_Length = T.length();if(S_Length < T_Length)return 0;//如果目标串比要查找的串要短,直接返回失败int i = 0,j = 0;int *next = new int[T_Length];get_next(T.c_str(),next);while(i < S_Length && j < T_Length){if(j == -1||*(S.c_str()+i) == *(T.c_str()+j)){i++;//如果对应i,j元素相同,则依次向后错一位j++;}elsej = *(next+j);//否则通关next函数,将j指针回溯一定距离}if(j >= T_Length)return i-T_Length+1;//当j==T_Length时,意味查找成功,返回开始字符所在的位置elsereturn 0;//否则返回失败}int get_choice(){//获取用户输入的选项,以进行相应操作int temp;cout<<"请输入你即将执行的操作:\n1——查找\t2——添加\t3——替换\n4——删除\t5——显示当前字符串\t6——退出\n你的选择:"<<endl;while(1){cin>>temp;if(temp < 7 && temp > 0)//只有输入1-6时才返回输入的选项return temp;else{cout<<"你的输入有误,请重新输入\n你的选择:";}}}void serach(string S){int k;string T;cout<<"请输入要查找的串:";cin.sync();//清空缓存区,否则将自动读入输入选项时候按下的回车键getline(cin,T);if(k = KMP(S,T))//KMP的返回值不为0即查找成功时候,if条件判断认为是真cout<<"所要查找的字符串从第"<< k <<"个字符开始"<<endl;elsecout<<"查找失败!"<<endl;}void add_char(string &S){int k;string m;cout<<"请输入你想插入的位置";while(1){cin>>k;if(k >= 0 && k <= S.length())//插入的位置不能再字符串外面break;elsecout<<"你输入的位置有误,请重新输入你想插入的位置:";}cout<<"请输入你要插入的字符串:";cin.sync();//清空缓存区,否则将自动读入输入选项时候按下的回车键getline(cin,m);S=S.insert(k,m);//将字符串m插到S的第k个位置上}void change(string &S){//调用String类将第K个字符到第m个字符替换为新字符串的函数int k,m;string temp;cout<<"请输入由第几个字符开始替换:";while(1){cin>>k;if(k < S.length() && k >=0)//起始位置必须小于字符串长度{cout<<"替换至第几个字符:";while(1){cin>>m;if(m <= S.length() && m>k)//结尾位置必须不大于字符串长度且不小于起始位置break;elsecout<<"输入有误,请重新输入结尾:";}break;}elsecout<<"输入有误,请重新输入开头:";}cout<<"请输入要替换成的字符串:";cin.sync();getline(cin,temp);S.replace(k,m,temp);//将目标串替换至指定位置}void delete_char(string &S){int k,m;cout<<"请输入从第几个字符开始删除:";while(1){cin>>k;if(k < S.length() && k >= 0)//如果k==S.length(),则下面无法删除0个{cout<<"删除的字符个数为:";while(1){cin>>m;if((k+m) <= S.length() && m > 0)//删除的最后一个字符不能超出字符串的长度break;elsecout<<"输入有误,请重新输入个数:";}break;}elsecout<<"输入有误,请重新输入开始位置:";}S=S.erase(k,m);}void display(string &S){cout<<"当前字符串为:"<<endl;cout<<S.data()<<endl;}void main(){int choice;string S;cout<<"请输入一个字符串:"<<endl;getline(cin,S);while(1){choice = get_choice();switch(choice){case 1:serach(S);break;case 2:add_char(S);break;case 3:change(S);break;case 4:delete_char(S);break;case 5:display(S);break;default:exit(0);}}}。
用C编写文本编辑器实验报告

用C#编写“文本编辑器”实验报告实验3 项目名称:文本编辑器1、实验目的和要求通过本实验,使得学生理解操作系统目录与文件的概念,掌握文件流的读写操作。
要求编写一个满足以下条件的文本编辑器程序。
(1)程序界面与操作系统中的记事本界面类似。
(2)程序可以打开、保存和编辑txt文本文件。
(3)程序可以查找和替换文本内容中的指定字符串2、程序代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;namespace 记事本{public partial class frmNotepad : Form{bool b = false;//布尔变量b用于判断文件是新建的还是从磁盘打开。
true表示文件从磁盘打开的,false表示文件是新建的,默认值为falsebool s = true;//布尔变量s用于判断文件是否被保存。
false表示未被保存,默认值为truepublic frmNotepad(){InitializeComponent();}/*多格式文本框TextChange的事件代码*/private void rtxtNotepad_TextChanged(object sender, EventArgs e){//文本被修改后,设置s为false,表示文件未被保存s = false;}/*【新建】菜单代码*/private void tsmiNew_Click(object sender, EventArgs e){//判断当前文件是否从磁盘打开,或者新建时文档不为空,并且文件未被保存if (b == true || rtxtNotepad.Text.Trim() != ""){//若文件未被保存if (s == false){string result;result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();switch (result){case "Yes"://若文件是从磁盘打开的if (b == true){//按文件打开的路径保存文件rtxtNotepad.SaveFile(odlgNotepad.FileName);}//若文件不是从磁盘打开的else if (sdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SaveFile(sdlgNotepad.FileName);}s = true;rtxtNotepad.Text = "";break;case "No":b = false;rtxtNotepad.Text = "";break;}}}}/*【打开】菜单代码*/private void tsmiOpen_Click(object sender, EventArgs e){if (b == true || rtxtNotepad.Text.Trim() != ""){string result;result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();switch (result){case "Yes":if (b == true){rtxtNotepad.SaveFile(odlgNotepad.FileName);}else if (sdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SaveFile(sdlgNotepad.FileName);}s = true;rtxtNotepad.Text = "";break;case "No":b = false;rtxtNotepad.Text = "";break;}}odlgNotepad.RestoreDirectory = true;if ((odlgNotepad.ShowDialog() == DialogResult.OK) && odlgNotepad.FileName != ""){rtxtNotepad.LoadFile(odlgNotepad.FileName);b = true;}s = true;}/*【保存】菜单代码*/private void tsmiSave_Click(object sender, EventArgs e){//若文件从磁盘打开并且修改了其内容if (b == true && rtxtNotepad.Modified == true){rtxtNotepad.SaveFile(odlgNotepad.FileName);s = true;}else if (b == false && rtxtNotepad.Text.Trim() != "" && sdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SaveFile(sdlgNotepad.FileName);s = true;b = true;odlgNotepad.FileName = sdlgNotepad.FileName;}}/*【另存为】菜单代码*/private void tsmiSaveAs_Click(object sender, EventArgs e)if (sdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SaveFile(sdlgNotepad.FileName);s = true;}}/*【退出】菜单代码*/private void tsmiClose_Click(object sender, EventArgs e){Application.Exit();}//【撤销】菜单代码private void tsmiUndo_Click(object sender, EventArgs e){rtxtNotepad.Undo();}//【复制】菜单代码private void tsmiCopy_Click(object sender, EventArgs e){rtxtNotepad.Copy();}//【剪切】菜单代码private void tsmiCut_Click(object sender, EventArgs e){rtxtNotepad.Cut();}//【粘贴】菜单代码private void tsmiPaste_Click(object sender, EventArgs e){rtxtNotepad.Paste();}//【全选】菜单代码private void tsmiSelectAll_Click(object sender, EventArgs e) {rtxtNotepad.SelectAll();}//【日期】菜单代码private void tsmiDate_Click(object sender, EventArgs e){rtxtNotepad.AppendText(System.DateTime.Now.ToString()); }//【自行换行】菜单代码private void tsmiAuto_Click(object sender, EventArgs e)if (tsmiAuto.Checked == false){tsmiAuto.Checked = true;//选中该菜单项rtxtNotepad.WordWrap = true;//设置为自动换行}else{tsmiAuto.Checked = false;rtxtNotepad.WordWrap = false;}}//【字体】菜单代码private void tsmiFont_Click(object sender, EventArgs e){fdlgNotepad.ShowColor = true;if (fdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SelectionColor = fdlgNotepad.Color;rtxtNotepad.SelectionFont = fdlgNotepad.Font;}}//【工具栏】菜单代码private void tsmiToolStrip_Click(object sender, EventArgs e){Point point;if (tsmiToolStrip.Checked == true){point = new Point(0, 25);//隐藏工具栏时,把坐标设为(0,25),因为菜单的高度为24tsmiToolStrip.Checked = false;tlsNotepad.Visible = false;rtxtNotepad.Location = point;//设置多格式文本框左上角的位置rtxtNotepad.Height += tlsNotepad.Height;//隐藏工具栏后,增加文本框的高度}else{//显示工具栏时,多格式文本框左上角的位置为(0,50),因为工具栏的高度25加上菜单的高度25=50point = new Point(0, 50);tsmiToolStrip.Checked = true;tlsNotepad.Visible = true;rtxtNotepad.Location = point;rtxtNotepad.Height -= tlsNotepad.Height;}}//【状态栏】菜单代码private void tsmiStatusStrip_Click(object sender, EventArgs e){if (tsmiStatusStrip.Checked == true){tsmiStatusStrip.Checked = false;stsNotepad.Visible = false;rtxtNotepad.Height += stsNotepad.Height;}else{tsmiStatusStrip.Checked = true;stsNotepad.Visible = true;rtxtNotepad.Height -= stsNotepad.Height;}}//【关于记事本】菜单代码private void tsmiAbout_Click(object sender, EventArgs e){frmAbout ob_FrmAbout = new frmAbout();ob_FrmAbout.Show();}private void tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e) {int n;//变量n用来接收按下按钮的索引号n = tlsNotepad.Items.IndexOf(e.ClickedItem);switch (n){case 1:tsmiNew_Click(sender, e);break;case 2:tsmiOpen_Click(sender, e);break;case 3:tsmiSave_Click(sender, e);break;case 4:tsmiCut_Click(sender, e);break;case 5:tsmiCopy_Click(sender, e);break;case 6:tsmiPaste_Click(sender, e);break;case 7:tsmiAbout_Click(sender, e);break;}}//计时器控件代码private void tmrNotepad_Tick(object sender, EventArgs e){tssLbl2.Text = System.DateTime.Now.ToString();}//窗体的sizechanged事件代码(为使得改变窗体大小时,状态栏随之改变)private void frmNotepad_SizeChanged(object sender, EventArgs e){frmNotepad ob_frmNotepad = new frmNotepad();tssLbl1.Width = this.Width / 2 - 12;tssLbl2.Width = tssLbl1.Width;}}}3、实验结果及程序运行界面。
用VC++MFC做文本编辑器

用VC++MFC做文本编辑器(转载)收藏1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。
2,在系统自动生成的CTextview_1Doc类里面增加一个控件,用于文本文档的暂时存放: class CTextview_1Doc : public CDocument public:CStringArray m_strContent;然后在CTextview 1Doc类的Serialize函数里面增加打开、保存文本文件的程序: void CTextview_1Doc::Serialize(CArchive& ar)CStri ng str;if ()) public:CEdit* m_ctrlEdit;该指针成员在类建立时要设置初始化值为NULL,否则运行起来就会出错,如下: CTextview_1View::CTextview_1View() :m_ctrlEdit(NULL) II添加这一行初始化代码II TODO: add con struct ion code here用第2点介绍的类似步骤,为CTextview_1View类重写其Onin itial Up date函数,添加内容如下:void CTextview_1View::OninitialUpdate()CView:: OnIn itialU pdate();// TODO: Add your specialized code here and/or call the base classCRect rcClie nt;GetClientRect( rcClient ); //获取当前视图的客户区大小// if ( m_ctrlEdit ) delete m_ctrlEdit; m_ctrlEdit = new CEdit();m_ctrlEdit->Create( ES_MULTILINE | WS_CHILD | WS_VISIBLE| WS_HSCROLL| ES_AUTOHSCROLL// 自动水平滚动| WS_VSCROLL| ES_AUTOVSCROLL // 自动垂直滚动CTextview_1Doc* pDoc = GetDocument(); //获取与视图相关联的文档指针//以下是将文档中的m_strContent内容全部赋给strCStri ng str;int nLines = (int)pDoc->();for ( int i=0; i<nLines; i++ )str = str + pDoc->( i );str = str + "\r\n"; // 换行m_ctrlEdit->SetTabStops( 16 ); // 设置Tab 符大小m_ctrlEdit->SetWindowText( str ); // 将文档内容传给控件4,现在运行一下,文本编辑器就做好了。
C语言实现文本编辑器

C语言实现文本编辑器本文将介绍使用C语言实现一个简单的文本编辑器的基本原理和实现步骤。
通过此编辑器,用户可以打开、编辑、保存和关闭文本文件,并且具备基本的文本编辑功能,如插入、删除、查找和替换文本等。
一、编辑器界面设计为了实现一个简单易用的文本编辑器,我们可以设计一个基于命令行界面的编辑器。
用户可以通过文本命令来操作编辑器,从而实现基本的编辑功能。
二、文件的打开和保存在C语言中,我们可以使用标准文件操作函数来实现文件的打开和保存。
用户可以通过指定文件路径来打开或保存文件。
打开文件时,程序会读取文件内容,并将其显示在编辑器界面中;保存文件时,程序会将编辑器内的文本内容写入目标文件中。
三、基本文本编辑功能1. 插入文本用户可以使用插入命令将文本内容插入到当前光标位置之前或之后。
程序会根据插入位置的不同,调整光标的位置,并显示插入后的文本内容。
2. 删除文本用户可以使用删除命令删除当前光标位置处的文本内容。
程序会删除光标所在位置的字符,并相应地调整文本的显示和光标的位置。
3. 搜索文本用户可以使用搜索命令来查找特定的文本内容。
程序会从当前光标位置开始搜索,并根据搜索结果将光标移动到匹配文本的位置。
4. 替换文本用户可以使用替换命令将指定的文本内容替换为新的内容。
程序会搜索文本中的所有匹配项,并将其替换为新的内容。
四、其他功能扩展除了基本的文本编辑功能外,我们还可以对编辑器进行功能扩展,以提升用户体验和编辑效率。
一些可能的扩展功能包括:1. 撤销和重做功能:允许用户撤销和重做操作,以便回退或恢复文本编辑的历史记录。
2. 多窗口编辑:支持同时打开和编辑多个文本文件的功能,提供多窗口切换和管理。
3. 自动保存与恢复:定时自动保存编辑的文本内容,并在下次启动时自动恢复上次编辑的状态。
4. 语法高亮:根据文本类型,对关键字、注释、字符串等进行特殊标记显示,提升代码可读性。
五、总结通过使用C语言,我们可以实现一个简单但功能完善的文本编辑器。
C语言实现简易文本编译器

C语言实现简易文本编译器数据结构课程设计之简易文本编译器(C语言实现)需求分析(1)具有图形菜单界面:显示实时年份,日期,星期及时间(2)查找:查找文本中的字符串,显示其出现的行数,列数及总共出现次数替换(等长,不等长):对文本中的文本实现等长及不等长替换插入(插串,文本块的插入):插入一行或在具体行号列号处插入文本块移动(行块,列块移动):向下移动一行,向上移动一行,具体行号列号处向左移动或向右移动删除:删除一行,删除莫一行,莫列,定长的内容(3)可正确存盘、取盘;:可读取,保存文本;(4)正确显示总行数。
(行数不少于5行,每行字符数不少于80个字符)采用的数据结构1:采用的逻辑结构文本编辑器主要是针对文本进行编辑,文本的操作就是对字符的操作。
文本编辑器可以从行、列两个方向进行编辑。
每一行可以看成一个线性表,线性表是一种线性结构,线性结构的特点是数据元素之间为线性关系,据元素“一个接一个的排列”。
在一个线性表中数据元素的类型是相同的,由于每一行可以存储的最大字数是相同的,行方向所有线性表的最大长度可以设置成相同的。
行与行之间的关系也可以看成一个线性表。
2.采用的存储结构线性表的存储分为两种:顺序存储和链式存储。
顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称为顺序表。
在程序设计语言中,一维数组在内存中占用的存储空间就是一组连续的存储区域,因此,用一维数组来表示顺序表的数据存储区域是再合适不过的。
链式存储是通过-组任意的存储单元来存储线性表中的数据元素的,为建立数据元系之间的线性关系对每个数据元素除了存放数据元素自身的信息之外,还需要和一起存放其后继或前驱所在的存储单元的地址,这两部分信息组成一个“结点”,每个元素都如此。
存放数据元素信息的称为数据域,存放其前驱或后继地址的称为指针域。
只有一个存储单元地址的为单链表,有两个存储单元地址的为双链表。
考虑到实际的功能需求,每行的线性表可以用顺序存储方式,每个字符是一个节点。
C加加文档编辑代码(可以真的保存)

#include <iostream>#include <fstream>#include <string>#include <iostream>#include <map>#include <string>#include <windows.h>bool login(std::map<std::string, std::string>& users) {std::string username, password;std::cout << "请输入用户名:";std::cin >> username;if (users.find(username) == users.end()) {std::cout << "用户名不存在" << std::endl;return false;}std::cout << "请输入密码:";std::cin >> password;if (users[username] != password) {std::cout << "密码错误" << std::endl;return false;}return true;}void registerUser(std::map<std::string, std::string>& users) {std::string username, password, confirmPassword;std::cout << "请输入用户名:";std::cin >> username;std::cout << "请输入密码:";std::cin >> password;std::cout << "请再次输入密码:";std::cin >> confirmPassword;if (password != confirmPassword) {std::cout << "两次输入的密码不一致,请重新注册。
C语言编写的文本编辑器
C语言编写的文本编辑器在现代的计算机应用领域中,文本编辑器是一个不可或缺的工具。
它们提供了一种方便的方式来编辑、查看和管理文本文件。
C语言作为一种高级编程语言,被广泛应用于软件开发领域。
本文将介绍如何使用C语言编写一个简单的文本编辑器。
一、概述文本编辑器是一种计算机程序,旨在帮助用户处理文本文件。
它们提供了一系列功能,如插入、删除、复制、粘贴和查找等,以便用户可以轻松编辑文本。
C语言作为系统级编程语言,具有高效的内存管理和强大的控制能力,非常适合编写文本编辑器。
二、设计思路在开始编写文本编辑器之前,需要明确其基本功能和设计思路。
一个简单的文本编辑器应具备以下功能:1. 新建、打开、保存文本文件;2. 插入、删除、复制、粘贴文本内容;3. 查找和替换文本内容;4. 撤销和重做操作。
基于以上功能,我们可以使用C语言的字符串处理函数和文件操作函数来实现文本编辑器。
三、核心代码下面是一个简化版本的C语言文本编辑器的核心代码示例:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_LENGTH 1000int main() {char buffer[MAX_LENGTH];FILE *file;char filename[100];int choice;printf("欢迎使用简单文本编辑器\n");while (1) {printf("\n1. 新建文件\n2. 打开文件\n3. 保存文件\n4. 插入文本\n5. 删除文本\n6. 复制文本\n7. 粘贴文本\n8. 查找文本\n9. 替换文本\n10. 撤销操作\n11. 重做操作\n12. 退出\n");printf("请输入选项:");scanf("%d", &choice);switch (choice) {case 1:printf("请输入文件名:"); scanf("%s", filename);file = fopen(filename, "w"); if (file == NULL) {printf("无法创建文件\n"); }break;case 2:printf("请输入文件名:"); scanf("%s", filename);file = fopen(filename, "r"); if (file == NULL) {printf("文件不存在\n"); }break;case 3:if (file == NULL) {printf("请先新建或打开文件\n");} else {fclose(file);printf("文件已保存\n");file = NULL;}break;case 4:if (file == NULL) {printf("请先新建或打开文件\n");} else {printf("请输入要插入的文本:"); fgets(buffer, MAX_LENGTH, stdin); fputs(buffer, file);fflush(file);}break;// 其他功能代码省略...case 12:if (file != NULL)fclose(file);printf("感谢使用简单文本编辑器,再见!\n");exit(0);default:printf("无效的选项\n");break;}}return 0;}```该代码演示了一个简单的文本编辑器,用户可以通过输入选项来执行各种功能。
C#简单文本编辑器的设计代码
1简单文本编辑器二、添加方法在class Form1类中定义两个变量:private string Fname; Fname; ////存放打开的文件名private void FileOpen() FileOpen() ////打开文件方法(1)添加“未保存处理”方法private void NotSaveProcess() NotSaveProcess() ////没有保存处理方法{if if (richTextBox1.Modified) (richTextBox1.Modified) ////如果richTextBox1中的文本被修改{if if ( (MessageBox MessageBox .Show(.Show(""文件未保存,是否保存?", , ""保存提示", , MessageBoxButtons MessageBoxButtons .YesNo) == DialogResult .Yes){if if (Fname == (Fname == """")SaveAs();else else{if if (FExtName == (FExtName == "txt""txt")richTextBox1.SaveFile(Fname, RichTextBoxStreamType .PlainText);else elserichTextBox1.SaveFile(Fname, RichTextBoxStreamType .RTFText);}}}}(2)添加“新建”文件方法private void NewFile() NewFile() ////新建文件方法{NotSaveProcess();Fname = Fname = """";FExtName = FExtName = "txt""txt"; richTextBox1.Text = richTextBox1.Text = """";this this .Text = .Text = ""新建-简单文本编辑器";richTextBox1.Modified = richTextBox1.Modified = false false ;//lblSave.Text="//lblSave.Text="已保存";}(3)添加“打开”文件方法添加一个richTextBox 控件、一个OpenFileDialog 控件private void FileOpen() FileOpen() ////打开文件方法{openFileDialog1.Filter = openFileDialog1.Filter = ""文本文件(*.txt)|*.txt|RTF 格式文件(*.RTF)|*.RTF";//设置过滤器属性openFileDialog1.FilterIndex = 1; //设置当前文件过滤器openFileDialog1.Title = openFileDialog1.Title = ""打开文件"; ; ////设置对话框标题openFileDialog1.InitialDirectory = Application .StartupPath;.StartupPath;////初始目录设为启动路径 openFileDialog1.RestoreDirectory = true ; ; ////自动回复初始目录openFileDialog1.ShowDialog(); //弹出打开文件对话框Fname = openFileDialog1.FileName;//获取打开的文件名if if (Fname != (Fname != """"){if if (openFileDialog1.FilterIndex == 1)//如果是文本文件richTextBox1.LoadFile(Fname, RichTextBoxStreamType .PlainText);else elserichTextBox1.LoadFile(Fname, RichTextBoxStreamType .RichText);//RTF 文件}this this .Text = Fname + .Text = Fname + "-"-简单文本编辑器";//窗体标题栏显示的信息}(4)添加“保存”方法private void Save() Save() //"//"保存"方法{if if (richTextBox1.Modified){if if (Fname == (Fname == """")SaveAs();else elseif if (FExtName == (FExtName == "txt""txt")richTextBox1.SaveFile(Fname, RichTextBoxStreamType .PlainText);else elserichTextBox1.SaveFile(Fname, RichTextBoxStreamType .RichText);} richTextBox1.Modified = richTextBox1.Modified = false false ;//lblSave.Text="//lblSave.Text="已保存";}(5)添加“另存为”方法添加一个SaveFileDialog 控件(对话框选项卡下),该控件主要作用用来弹出Windows 中的“另存为”对话框。
25编程器源码
25编程器源码以下是一些编程器的源代码,可以帮助您在编写软件时提高效率和准确性。
1. 文本编辑器:一个简单的文本编辑器,可以让用户打开、编辑和保存文本文件。
它具有基本的文本编辑功能,如复制、粘贴和查找/替换。
```#include <iostream>#include <fstream>int main() {std::string filename;std::cout << 'Enter filena ';std::cin >> filename;std::ifstream file(filename);if (!file) {std::cout << 'Error opening the file!' << std::endl; return 1;}std::string line;while (std::getline(file, line)) {std::cout << line << std::endl;}file.close();return 0;}```2. 图片处理器:一个可以打开、编辑和保存图像文件的程序。
它可以执行一些基本的图像操作,如调整大小、旋转和应用滤镜。
```#include <iostream>#include <opencv2/opencv.hpp>int main() {std::string filename;std::cout << 'Enter filena ';std::cin >> filename;cv::Mat image = cv::imread(filename);if (image.empty()) {std::cout << 'Error opening the image!' << std::endl; return 1;}// Perform some image processing operations herecv::imshow('Image', image);cv::waitKey(0);cv::destroyAllWindows();return 0;}```3. 数据库管理器:一个用于连接和管理数据库的程序。
c简易文本编辑器tt
课题46:简易文本编辑器(2人)。
要求:1) 具有图形菜单界面;2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;3) 可正确存盘、取盘;4) 正确显示总行数。
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define MAX 10000#define _CRT_SECURE_NO_DEPRECATE //在vs中取消warning的警告void menu();void shuru(char text[]);void bc(char text[]);void dakai(char text[]);void dayin(char text[]);void chazhao(char text[],int l);void tihan(char text[],int l);int strindex(char text[],char t[],int i2,int l);void shanchu(char p[],int l);void cs(char text[]);void charu(char text[],int l);void tuichu(int status);char text[MAX]=""; //文本编辑域char name[20]=""; //文件保存的位置int status=0; //显示是否保存过的状态int ntext; //文本编辑的位置void dakai(char text[]){system("cls");FILE *fp;char pd,ch;char name[30];int i=0;printf("输入A:确定打开文件(未保存的数据将会丢失) M:返回主菜单");fflush(stdin);pd=getchar();if (pd=='A'||pd=='a'){printf("请输入要打开文件名字(例如c:\\a.txt)");scanf("%s",name);while ((fp=fopen(name,"r"))==NULL){printf("\n打开文件失败,请重新输入要打开的文件名:");scanf("%s",name);}cs(text);while(!feof(fp)){ch=fgetc(fp);text[i]=ch;i ;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");dayin(text);}if (pd=='M'||pd=='m')menu();}void bc(char text[]){system("cls");FILE *fp;char pd;char tmp;int i;printf("\n输入【A】保存;任意键返回主菜单不保存\n");fflush(stdin);pd=getchar();if (!(pd=='A'||pd=='a')){menu();}else{if(name[20]==NULL){printf("\n请输入保存文件名(例如: c:\\a.txt):");scanf("%s",name);}while ((fp=fopen(name,"w "))==NULL){printf("文件不存在,请重新输入文件名:");scanf("%s",name);}printf("\nA:确定;B:取消:");while(scanf("%c",&tmp)!=EOF){if (tmp=='A' || tmp=='a'){for(i=0;i<ntext;i )fprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if (tmp=='B' || tmp=='b'){break;}}}}void cs(char text[]){int i;for (i=0;i<ntext;i ){text[i]='\0';}ntext=0;status=0;}int strindex(char text[],char t[],int i2,int l) //查找要操作的数据的位置(模式匹配){int i1=l,j=0;while (i1<ntext&&j<i2){if (text[i1]==t[j]) //继续匹配下一个字符{j ;i1 ;//主串和子串依次匹配下一个字符}else //主串、子串指针回溯重新开始下一次匹配{i1=i1-j 1; //主串从下一个位置开始匹配j=0;//子串从头开始匹配}}if (j>=i2){return(i1-i2);} //返回匹配的第一个字符的下标elsereturn(-1); //模式匹配不成功}void menu(){system("cls");time_t timep;time (&timep);printf("%s",ctime(&timep));printf("\n\n\n\n\n\n\n\n\n\t\t\tWelcom to use our TXT edition system!\n");printf("\n\n\t\t\t 欢迎您使用文本编辑器软件!\n");printf("\n\n\n\n\n\n\n\n\npress Enter to continue...\n");getchar();loop:system("cls");printf("\n\n\n\n\t\t******************简易文本编辑器*****************\n\n");printf("\t\t\t\t----0.清空内容--\n");printf("\t\t\t\t----1.打开文件--\n");if (ntext==0){printf("\t\t\t\t----2.输入内容--\n");}else {printf("\t\t\t\t----2.继续输入--\n");}printf("\t\t\t\t----3.查找------\n");printf("\t\t\t\t----4.插入------\n");printf("\t\t\t\t----5.删除------\n");printf("\t\t\t\t----6.替换------\n");printf("\t\t\t\t----7.显示内容--\n");printf("\t\t\t\t----8.保存------\n");printf("\t\t\t\t----9.退出------\n");printf("\n\t\t*********************选项************************\n");printf("\n\t\t\t\t输入选项0-9:");char n;fflush(stdin);n=getchar();if(n>='0'&&n<='9'){switch (n){case '0': cs(text);break;case '1': dakai(text);break;case '2': shuru(text);break;case '3': chazhao(text,0);break;case '4': charu(text,1);break;case '5': shanchu(text,0);break;case '6': tihan(text,0);break;case '7': dayin(text);break;case '8': bc(text);break;case '9': tuichu(status);default : break;}}else{printf("\n输入有误,请重新输入:");fflush(stdin);n=getchar();}system("pause");goto loop;}void chazhao(char text[],int l){system("cls");int i,t,a=-1;char pattern[20],bd,pd;printf("原文为:\n");dayin(text);printf("请输入您要查找的内容");scanf("%s",pattern);printf("您查找的内容是:%s\n",pattern);t=strlen(pattern);loop:a=strindex(text,pattern,t,l);if (a!=-1){l=a t;}int hs=1,ls=0;for (i=0;i<=a;i ){ls ;if (text[i]=='\n'){hs ;ls=0;}}if (a==-1){printf("查找到结尾没有找到\n输入R将重头查找;任意键返回主菜单");l=0;fflush(stdin);pd=getchar();}else{printf("已经找到在第%d行第%d列,输入R继续查找下一处;任意键返回主菜单",hs,ls);fflush(stdin);bd=getchar();if (bd=='R'||bd=='r')goto loop;}if (pd=='R'||pd=='r'){l=0;chazhao(text,l);}}void dayin(char text[]){system("cls");printf("现在文本的内容为:\n");printf("%s\n",text);int hs=1,i;for (i=0;i<ntext;i ){if (text[i]=='\n'){hs ;}}printf("\n文本共有%d行\n",hs);}void shuru(char text[]){system("cls");printf("请输入内容(输入@结束输入并返回主菜单):\n");printf("%s",text);char c;int i=ntext,j=ntext;fflush(stdin);while ((c=getchar())!='@'){text[i]=c;i ;ntext=i;continue;}int cout=0,zf=0,h=1,hs=1,zfs=0;for(;cout<ntext;cout ){zf ;if(text[cout]=='\n'){h ;zf--;}if(text[cout]==' ')zf--;}for(cout=j;cout<ntext;cout ){zfs ;if(text[cout]=='\n'){hs ;zfs--;}if(text[cout]==' ')zfs--;}printf("统计:文本一共有%d个字符,%d行,本次输入了%d个字符,%d行\n",zf,h,zfs,hs);}void shanchu(char p[],int l){int i,a=-1,t2=0;char x[20],px,pd,pdx,c;system("cls");printf("%s",p);printf("\n输入【A】执行查找删除内容;任意键返回主菜单:");fflush(stdin);px=getchar();if (px=='a'||px=='A'){printf("\n输入您要删除的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@'){if (c=='@'){break;}else{x[t2]=c;t2 ;continue;}}loop:a=strindex(p,x,t2,l);int hs=1,ls=0;for (i=0;i<=a;i ){ls ;if (p[i]=='\n'){hs ; ls=0;}}if (a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;其他键将返回主菜单:");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n 输入【A】确定删除;输入【B】寻找下个词;其他键将返回主菜单:",hs,ls);fflush(stdin);pd=getchar();l=t2 a;if (pd=='a'||pd=='A'){for(i=a;i<ntext;i ){p[i]=p[i t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}else if (pd=='b'||pd=='B')goto loop;}if(pdx=='r'||pdx=='R')shanchu(text,l);}}void charu(char text[],int l) //向文本中插入内容{system("cls");int i=0,t=0,t2=0,a=-1,b;char cr[20]="",pd,x[500],c,d;printf("\n当前文本信息为:\n");printf("%s",text);printf("\n输入您要在哪个内容前插入,以@结束:");fflush(stdin);while ((c=getchar())!='@') //用一个数组接收要插入在哪个内容之前{if (c=='@'){break;}else{cr[t]=c;t ;continue;}}loop:a=strindex(text,cr,t,l); //查找并返回要插入的位置点int hs=1,ls=0;for (b=0;b<a;b ){ls ;if (text[b]=='\n'){hs ;ls=0;}}if (a==-1){printf("\n查找到结尾没有找到插入点,输入【R】查找其他;按其他键返回菜单:\n");l=0;fflush(stdin);d=getchar();fflush(stdin);}else{printf("\n您要插入的位置是第%d行,第%d列之前\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:",hs,ls 1);fflush(stdin);pd=getchar();if (pd=='a'||pd=='A'){l=a t;goto loop;}else if (pd=='b'||pd=='B'){printf("\n\n输入您要插入的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@'){if (c=='@'){break;}else{x[t2]=c;t2 ;continue;}}for (i=ntext;i>=a;i--){text[i t2]=text[i];}for (i=0;i<t2;i ){text[i a]=x[i];}ntext=ntext t2;printf("\n当前文本信息为:\n");for (i=0;i<=ntext-1;i )printf("%c",text[i]);printf("\n文本插入成功\n");fflush(stdin);getchar();}}if (d=='r'||d=='R'){l=0;charu(text,l);}status=0;}void tihan(char p[],int l) //内容替换{int t=0,t1=0,i,a,b;char c,th[20],d,d1,bth[20];int i2;system("cls");printf("\n当前文本信息为:\n");for (i2=0;i2<=ntext-1;i2 )printf("%c",p[i2]);printf("\n输入要被替换的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@') //t指替换前内容的长度{if (c=='@'){break;}else{bth[t]=c;t ;continue;}}loop:a=strindex(p,bth,t,l); //查找要被替换的内容的位置int hs=1,ls=0;for (b=0;b<a;b ){ls ;if (p[b]=='\n'){hs ;ls=0;}}if (a==-1){printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容,按其他键返回主菜单键\n");l=0;d=getchar();fflush(stdin);}else{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:",hs,ls 1);fflush(stdin);l=t a;char pd;pd=getchar();if (pd!='a'&&pd!='A'){printf("\n是否要替换该内容?\nA:替换给内容;其他键返回主菜单\n请选择:");fflush(stdin);d1=getchar();if (d1=='a'||d1=='A'){printf("\n输入要替换的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@') //t1指替换后的内容长度{if (c=='@'){break;}else{th[t1]=c;t1 ;continue;}}if (t==t1) //将要被替换的内容和替换后的内容进行长度比较{for (i=0;i<t1;i )p[i a]=th[i];}else{if (t>t1){for (i=0;i<t1;i ){p[i a]=th[i];}for (i=a t1;i<ntext;i ){p[i]=p[i t-t1];}ntext=ntext t1-t;}else{for (i=ntext;i>=a;i--){p[i t1-t]=p[i];}for (i=0;i<t1;i ){p[i a]=th[i];}ntext=ntext t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for (i2=0;i2<=ntext-1;i2 )printf("%c",p[i2]);getchar();status=0;}}elsegoto loop;}if(d=='r'||d=='R')tihan(text,l);}void tuichu(int status){char pd;if(status)exit(0);elseprintf("还未保存文件,确定退出?(Q.直接退出;Y.保存后退出");fflush(stdin);pd=getchar();if(!(pd=='Q'||pd=='q'))bc(text);exit(0);}int main(){menu();return (0);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define F1 15104 /*F1键:打开文件菜单*/
#define F2 15360 /*F2键:打开编辑菜单*/
#define F3 15616 /*F3键:打开帮助菜单*/
#define F10 17408 /*F10键:进入文本快速预览模式*/
recordΒιβλιοθήκη r[500]; /*定义一个有500个元素的结构体数组,保存选定的文本字符的属性*/
typedef struct node /*定义保存行中的单个字符的结构*/
{
char ch; /*数据域:保存一字符*/
struct node *next; /*指针域:指向下一个结点的指针*/
}node;/*由此类型节点构成的单链表,命名为:列单链表*/
int value,backup,NUM;
/*value保存有值数组元素的最大下标值,backup保存value的副本,NUM保存当前行中的用户输入的字符个数*/
typedef struct record
{
char ch; /*保存一字符*/
int col, line; /*x轴和y轴坐标*/
}record;
if(p->ch>=32&&p->ch<127) return p->ch; /*若第m行,第n列的字符为常规字符,则返回该字符*/
else return 0; /*若第m行,第n列的字符既非回车符又非常规字符,则返回0*/
}
int judge(Hnode *Hhead,int m) /*judge():返回第m行中的常规字符总的个数,不包括回车符*/
{
int i,j;
gotoxy(1,1); /*在文本窗口中设置光标至(1,1)处*/
textbackground(7); /*选择新的文本背景颜色,7为LIGHTGRAY淡灰色*/
textcolor(0); /*在文本模式中选择新的字符颜色0为BLACK黑*/
insline(); /*在文本窗口的(1,1)位置处中插入一个空行*/
gotoxy(n,m);/*移至第m-1行,第76列*/
flag=1; /*移位的标志置1*/
}
for(i=1;i<m;i++) /*定位至行单链表中的第m个元素*/
{
q=q->nextl;
}
p1=q->next;
for(i=1;i<n-1;i++) /*定位至列单链表中的第n-1个元素*/
{
p1=p1->next;
{
int i;
Hnode *q;
node *p;
q=Hhead;
for(i=1;i<m;i++) /*定位至行单链表中的第m个元素*/
q=q->nextl;
p=q->next;/*获取第m个节点的数据域*/
for(i=1;i<n;i++) /*定位至列单链表中的第n个元素*/
p=p->next;
if(p->ch==13) return -1; /*若第m行,第n列的字符为回车键,则返回-1*/
{
p=p->next;
num++; /*统计第m行的字符个数*/
}
/*行尾字符还没有判断,接下来判断行尾字符*/
if(p->ch==13&&num==0) return 0; /*返回0,表示当前行只有一个回车字符*/
if(p->ch>=32&&p->ch<127) return num+1; /*返回num+1,表示当前行的最后一个字符为常规字符*/
gotoxy(1,24); cprintf("%c",196); /*在窗口左下角,输出-*/
gotoxy(80,1); cprintf("%c",196); /*在窗口右上角,输出-*/
gotoxy(80,24); cprintf("%c",196); /*在窗口右下角,输出-*/
gotoxy(7,1); cprintf("%c %c File %c %c",179,17,16,179); /* | < > |*/
/*文本编辑器editor源代码*/
#include <stdio.h>
#include <conio.h>
#include <bios.h>
#include <math.h>
#define LEFT 0x4b00 /*←:光标左移*/
#define RIGHT 0x4d00 /*→:光标右移*/
#define DOWN 0x5000 /*↓键:光标下移*/
}
p2=p1->next; /*p2指向列单链表中的第n个元素*/
if(n==1) /*若是删除第m行第1列的字符*/
{
q->next=p1->next;
free(p1);
}
else
{
p1->next=p2->next; /*在单链表中删除第m行第n列的元素*/
free(p2);
}
/*删除掉第m行第n列的元素后,处理行单链表中第m个节点后的数据向前移务*/
}
q=q->nextl; /*指向下一个节点*/
if((p->ch==13||p->ch==-1)&&q!=NULL) gotoxy(1,wherey()+1); /*若ch为回车或EOF标记,光标跳至下行的开始处*/
}while(q!=NULL); /*逐行逐列显示文本字符*/
}
int check(Hnode *Hhead,int m,int n) /*check():在单链表中检查第m行第n列位置的字符,若为常规字符,则返回该字符*/
typedef struct Hnode /*定义保存所有列单链表首节点的指针的结构*/
{
node *next; /*指向列单链表的首节点的地址*/
struct Hnode *nextl; /*指向下一个节点的指针*/
}Hnode;/*由此类型节点构成的单链表,命名为:行单链表*/
void drawmain() /*画主窗口函数*/
}
for(i=1;i<=79;i++)
{
gotoxy(1+i,2); /*在第2行,第2列开始*/
cprintf("%c",196); /*在窗口顶端,输出-*/
gotoxy(1+i,25); /*在第25行,第2列开始*/
cprintf("%c",196); /*在窗口底端,输出-*/
}
gotoxy(1,1); cprintf("%c",196); /*在窗口左上角,输出-*/
/*双重循环,读取并显示保存在单链表中字符*/
do{
p=q->next;
while(p!=NULL&&p->ch>=32&&p->ch<127&&p->ch!=13&&p->ch!=-1)
/*指针p不能为空,且数据域必须为常规字符*/
{
putch(p->ch);/*在文本窗口中输出该字符*/
p=p->next; /*指向下一个节点*/
}
q=q->nextl; /*指向下一个节点*/
printf("\n");/*输出一个回车*/
}while(q!=NULL);
getch();
clrscr();
drawmain();/*按任意键后,回到主窗口界面*/
window(2,2,79,23);
textbackground(9);
for(i=0;i<24;i++)
for(i=1;i<=24;i++)
{
gotoxy(1,1+i); /*(x,y)中x不变,y++*/
cprintf("%c",196); /*在窗口左边输出-,即画出主窗口的左边界*/
gotoxy(80,1+i);
cprintf("%c",196); /*在窗口右边,输出-,即画出主窗口的右边界*/
{
Hnode *q,*q1;
node *p1,*p2,*tail;
int i,num=0,j,flag=0;
q=Hhead;
if(n==0&&m==1) return; /*第1行,第0列不存在*/
if(n==0&&m>1) /*若为第0列字符,但行必须大于1,执行向上行移处理*/
{
n=76;
m=m-1;
gotoxy(27,1); cprintf("%c %c Edit %c %c",179,17,16,179); /* | < > |*/
gotoxy(47,1); cprintf("%c %c Help %c %c",179,17,16,179); /* | < > |*/
gotoxy(5,25); /*跳至窗口底端*/
if(p->ch==13&&num!=0) return num; /*返回num,表示当前行的最后一个字符为回车符,不计算在内*/