数据结构 简易文本编辑器
学会使用电脑的文本编辑器
![学会使用电脑的文本编辑器](https://img.taocdn.com/s3/m/33f8b2af6394dd88d0d233d4b14e852458fb393e.png)
学会使用电脑的文本编辑器现代社会,电脑已经成为人们日常生活中无法或缺的工具。
而电脑的文本编辑器作为其中的重要组成部分,具有强大的功能和方便的操作,给我们的学习、工作和生活带来了诸多便利。
本文将介绍如何学会使用电脑的文本编辑器,并探讨其在不同领域中的应用。
一、认识电脑的文本编辑器文本编辑器是一种用于创建、编辑和格式化文本的软件工具。
常见的文本编辑器包括记事本(Notepad)、WordPad、Microsoft Word、Sublime Text等。
不同的文本编辑器提供了不同的功能和操作方式,但它们的基本原理是相同的,都是用来处理和管理文字信息的工具。
二、掌握基本的文本编辑操作使用文本编辑器需要掌握一些基本的操作,包括打开文件、新建文件、保存文件、复制粘贴、撤销重做、查找替换等。
这些操作都是非常简单的,只需要通过点击按钮或使用快捷键即可完成。
熟练掌握这些基本操作,可以提高工作效率,减少错误。
三、格式化文本文本编辑器不仅可以编辑文字内容,还可以对文字进行格式化。
格式化文本包括调整字体、字号、字形、颜色等,以及添加标点符号、段落缩进、行距等。
通过合理的文本格式化,可以使文本更加美观、易读,提高文章的质量和可读性。
四、应用于办公场景在办公场景中,文本编辑器是必不可少的工具。
我们可以使用文本编辑器撰写文件、编辑报告、制作演示文稿等。
在这些场景中,除了基本的文本编辑操作,还需要了解一些高级功能,例如插入表格、图形、超链接等。
掌握这些高级功能可以使我们的工作更加丰富多样、高效快捷。
五、应用于编程开发对于编程开发人员来说,文本编辑器是最为常用的工具之一。
编程所使用的脚本、代码都是通过文本编辑器进行编写和编辑的。
不同的编程语言对应不同的文本编辑器,例如Java使用Eclipse、Python使用PyCharm等。
熟练掌握特定的文本编辑器,能够提高代码编写的速度和质量。
六、应用于写作创作文本编辑器也广泛用于写作创作领域。
Mac系统的文本编辑器推荐
![Mac系统的文本编辑器推荐](https://img.taocdn.com/s3/m/da651f7a42323968011ca300a6c30c225901f08e.png)
Mac系统的文本编辑器推荐在日常生活和工作中,我们经常需要使用文本编辑器来处理各种文本文件。
对于Mac系统的用户来说,选择一个合适的文本编辑器非常重要,因为它能够影响我们的工作效率和使用体验。
在本文中,我将为您推荐几款在Mac系统上使用的优秀文本编辑器。
1. TextMateTextMate是一款非常受欢迎的文本编辑器,它提供了丰富的功能和高度可定制性。
TextMate支持多种语言的语法高亮显示,代码折叠,自动完成等功能,使得编码工作更加方便和高效。
此外,TextMate还支持插件的安装和配置,用户可以根据自己的需求定制编辑器的功能和外观。
2. Sublime TextSublime Text是目前为止最受欢迎的文本编辑器之一,无论是初学者还是专业人士都可以通过Sublime Text轻松地进行编码工作。
Sublime Text具有快速响应的编辑器速度、灵活的多光标编辑和强大的宏功能等特点。
此外,Sublime Text还支持丰富的插件生态系统,用户可以通过安装插件来扩展编辑器的功能。
3. AtomAtom是由GitHub开发的一款现代化的开源文本编辑器。
Atom具有直观的界面,丰富的主题和插件,以及可高度定制的编辑器设置。
Atom支持Git版本控制,内置了强大的搜索和替换功能,并且还有一个活跃的社区,用户可以在社区中分享主题、插件和代码片段。
4. Visual Studio CodeVisual Studio Code是一款由微软开发的免费开源的文本编辑器。
虽然它的名字中带有"code",但实际上它是一个功能强大的编辑器,支持多种编程语言,并且具有智能代码完成、调试、Git集成等功能。
Visual Studio Code还支持丰富的插件扩展,并且有一个活跃的社区,用户可以分享插件和主题。
5. BBEditBBEdit是一款经典的文本编辑器,适用于Mac系统。
它具有简洁、直观的界面,支持多种编码和语法高亮显示。
VB课程设计-文本编辑器
![VB课程设计-文本编辑器](https://img.taocdn.com/s3/m/a5ef729d7e192279168884868762caaedc33ba68.png)
VB课程设计报告——文本编辑器学院名称:学生姓名:专业名称:班级:一、课程设计题目用Visual Basic程序设计语言编写一个简易的文本编辑器要求:有最基本的文本编辑功能,包括复制、剪切、粘贴、字体设置、背景颜色设置、字体颜色设置;同时拥有文本管理功能,包括打开文件、保存文件;以及完整的系统运行退出等功能,所有的操作可选择设定的快捷键。
二、课程设计目的虽然本学期的Visual Basic课程是自学的,相对于课堂学习有些不足,但通过平时的上机实验,初步掌握了VB程序设计的各种方法,学会了编写最基本的VB程序;对于完整的VB程序设计来讲是很不足的,平时掌握的只是单独的窗体(Form)程序编写,以及各种简单控件的使用,没有做到很好连贯性,所以有必要做一次完整的VB程序设计,结合所学的基本知识,使用多个窗体自成一套系统,加上各种控件的综合运用,初步设计一个合格的VB 应用程序;这样在巩固VB所学的同时,更好地学会程序设计的一些思想和方法,对于以后的编程学习或是工作有重要的实践意义。
三、课程设计说明题目为文本编辑器,即是最基本的文本编辑程序,首先必须做好文本编辑器本身的功能,然后对其完善,做成一个完整的小程序功能设计说明:功能是这个文本编辑器的核心内容,也就是程序的作用,它是用来做什么的;本程序就是用来编写文本的,编写过程中要利用到窗体(Form)一个,控件包括:RichTextBox1(超文本框)、CommonDialog(通用对话框),以及InputBox(消息框)、菜单编辑器等,。
要做的工作就是编写代码把这些控件和窗体等结合为一体,使得程序能够成为一体,顺畅运行。
本次设计在按照题目要求的前提下,为了完整地展示一个应用程序,在最初就设计为最基本的文本的编辑器,所以取名为“易记本”,就是简易记事本的简称,然后加入图标,在程序完成之后还进行了大包操作,得到应用程序的安装文件,最后安装在电脑上运行使用。
四.源代码Private Sub Command1_Click()Dim i As IntegerIf Text2.Text <> "123456" Theni = MsgBox("密码错误", 5 + vbExclamation, "警告")If i <> 6 ThenEndElseText2.Text = ""Text2.SetFocusEnd IfEnd IfForm1.HideForm2.ShowEnd SubPrivate Sub Form_Load()Text1.Text = ""Text1.MaxLength = 6Text2.Text = ""Text2.MaxLength = 6Text2.PasswordChar = "*"End SubPrivate Sub Text1_LostFocus()If Not IsNumeric(Text1.Text) Then MsgBox "帐号必须为数字", , "警告" Text1.Text = ""Text1.SetFocusEnd IfEnd SubPrivate Sub Command1_Click()Form2.HideForm3.ShowEnd SubPrivate Sub Command2_Click()Form2.HideForm4.ShowEnd SubPrivate Sub Command3_Click()Form2.HideForm5.ShowEnd SubPrivate Sub Color_Click() CommonDialog1.Action = 3Text1.ForeColor = CommonDialog1.Color End SubPrivate Sub Command1_Click()Form3.HideForm2.ShowEnd SubPrivate Sub Copy_Click()Dim st As Stringst = Text1.SelTextEnd SubPrivate Sub Cut_Click()Dim st As Stringst = Text1.SelTextText1.SelText = ""End SubPrivate Sub Exit_Click()EndEnd SubPrivate Sub Font_Click()CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects CommonDialog1.Action = 4Text1.FontName = CommonDialog1.FileNameText1.FontSize = CommonDialog1.FontSizeText1.FontBold = CommonDialog1.FontBoldText1.FontItalic = CommonDialog1.FontItalicText1.FontStrikethru = CommonDialog1.FontStrikethru Text1.FontUnderline = CommonDialog1.FontUnderline Text1.ForeColor = CommonDialog1.ColorEnd SubSub New_Click()Text1.Text = ""Me.Caption = FileEnd SubSub Open_Click()CommonDialog1.Action = 1Text1.Text = ""Open CommonDialog1.FileName For Input As #1Do While Not EOF(1)Line Input #1, inputdataText1.Text = Text1.Text + inputdata + vbCrLfLoopClose #1End SubPrivate Sub Paste_Click()Text1.SelText = stEnd SubPrivate Sub Print_Click()CommonDialog1.Action = 5For i = 1 To CommonDialog1.CopiesPrinter.Print Text1.TextNext iPrinter.EndDocEnd SubPrivate Sub SaveAs_Click()CommonDialog1.FileName = "vb课设用.txt" CommonDialog1.DefaultExt = "txt"CommonDialog1.Action = 2Open CommonDialog1.FileName For Output As #1 Print #1, Text1.TextEnd SubDim arr As Long, sum As Long, a As IntegerPrivate Sub Command1_Click()a = HScroll1.ValueText1.Text = plus(a)Call isprime(a)End SubPrivate Sub Command2_Click()EndEnd SubPrivate Sub HScroll1_Change()Label2.Caption = HScroll1.ValueEnd SubSub isprime(max As Integer)Dim x As Integer, i As Integer, j As IntegerFor i = 2 To maxx = 0For j = 2 To i - 1If i Mod j = 0 Then x = 1Next jIf x = 0 Then Label2.Caption = Label2.Caption & i & " " Next iEnd SubFunction plus(a As Integer) As LongFor i = 1 To asum = sum + iNext iplus = sumEnd FunctionDim x1 As IntegerDim y1 As IntegerDim x2 As IntegerDim y2 As IntegerDim flag As BooleanPrivate Sub Command1_Click()On Error Resume NextCommonDialog1.CancelError = True CommonDialog1.DialogTitle = "颜色" CommonDialog1.ShowColorIf Err <> 32755 Then Picture1.ForeColor = CommonDialog1.Color End IfEnd SubPrivate Sub Command2_Click()Picture1.ClsEnd SubPrivate Sub Command3_Click()Form5.HideForm6.ShowEnd SubPrivate Sub Option1_Click()Picture1.DrawWidth = 1End SubPrivate Sub Option2_Click()Picture1.DrawWidth = 2End SubPrivate Sub Option3_Click()Picture1.DrawWidth = 4End SubPrivate Sub Option4_Click()Picture1.DrawWidth = 8End SubPrivate Sub Form_Load()Picture1.Scale (0, 0)-(400, 400)flag = FalseEnd SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) flag = Truex1 = Xy1 = YEnd SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If flag = False ThenExit SubEnd IfIf flag = True Thenx2 = Xy2 = YPicture1.Line (x1, y1)-(x2, y2)x1 = x2y1 = y2End IfEnd SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) flag = FalseEnd SubDim ctP As Single, ctDu() As Single, ctDuS As LongPrivate Sub Command1_Click()Picture1.AutoRedraw = True: ctP = 3.1415926Timer1.Interval = 20: Timer1.Enabled = Not Timer1.EnabledEnd SubPrivate Sub Command2_Click()Form7.HideForm6.ShowEnd SubPrivate Sub Form_Load()Me.Caption = "旋转的椭圆": Command1.Caption = "转/停"Text1.Text = "9 个": Timer1.Enabled = FalseEnd SubPrivate Sub Text1_Change()ctDuS = Val(Text1.Text)If ctDuS > 200 Then Text1.Text = "200"If ctDuS < 1 Then ctDuS = 1ReDim ctDu(0 To ctDuS)End SubPrivate Sub Timer1_Timer()Dim I As LongPicture1.DrawWidth = 3Picture1.ClsFor I = 0 To ctDuSctDu(I) = ctDu(I) + ctP * 0.01 * I / 9If ctDu(I) > ctP * 2 Then ctDu(I) = ctDu(I) - ctP * 2Show1 ctDu(I), &HFFFFFF / (ctDuS + 1) * I * 0.6NextDim x As Single, y As SingleStatic J As SinglePicture1.DrawWidth = 15x0 = Picture1.ScaleWidth * 0.5: y0 = Picture1.ScaleHeight * 0.5 Picture1.PSet (x0, y0), 255x = 1200: y = 0: J = J - 0.05If J < -ctP * 2 Then J = J + ctP * 2Zhuan J, x, yPicture1.PSet (x0 + x, y0 + y), RGB(0, 0, 255)End SubPrivate Sub Show1(ToJ As Single, Se As Long)Dim I As Single, x As Single, y As Single, x0 As Single, y0 As Single Dim a As Single, b As Single, x1 As Single, y1 As SingleIf Picture1.ScaleWidth < Picture1.ScaleHeight Thena = Picture1.ScaleWidth * 0.45Elsea = Picture1.ScaleHeight * 0.45End Ifb = a * 0.25x0 = Picture1.ScaleWidth * 0.5: y0 = Picture1.ScaleHeight * 0.5x = -a: y = 0: Zhuan ToJ, x, yx1 = a: y1 = 0: Zhuan ToJ, x1, y1Picture1.Line (x0 + x, y0 + y)-(x0 + x1, y0 + y1), Sex = 0: y = -b: Zhuan ToJ, x, yx1 = 0: y1 = b: Zhuan ToJ, x1, y1Picture1.Line (x0 + x, y0 + y)-(x0 + x1, y0 + y1), SeFor I = 0 To ctP * 2 Step 0.1x = a * Sin(I): y = b * Cos(I)Zhuan ToJ, x, yPicture1.Line -(x0 + x, y0 + y), SeNextx = a * Sin(I): y = b * Cos(I)Zhuan ToJ, x, yPicture1.Line -(x0 + x, y0 + y), SeEnd SubPrivate Sub Zhuan(ToJ As Single, x As Single, y As Single) Dim S As Single, J As SingleS = Sqr(x ^ 2 + y ^ 2)If S = 0 Then J = 0 Else J = y / SIf Abs(J) >= 1 ThenIf J > 0 Then J = ctP * 0.5 Else J = -ctP * 0.5ElseJ = Atn(J / Sqr(-J * J + 1))End IfIf x < 0 Then J = -ctP - Jx = S * Cos(J + ToJ): y = S * Sin(J + ToJ) End Sub Private Sub Command1_Click()EndEnd Sub五、运行结果六.心得体会通过本次课程设计,使我对VB的认识更加深入了一层,VB主要由两部分组成,一个是Visual 可视化界面设计,另一个是Basic程序设计。
程序编辑的必备工具文本编辑器推荐
![程序编辑的必备工具文本编辑器推荐](https://img.taocdn.com/s3/m/1dfaa8c1710abb68a98271fe910ef12d2bf9a967.png)
程序编辑的必备工具文本编辑器推荐文本编辑器是程序编辑的必备工具之一。
它为程序员提供了一个便捷且高效的环境,用于编辑、调试和管理代码。
在选择适合自己的文本编辑器时,往往需要考虑诸多因素,如界面友好度、功能强大程度、插件扩展性以及跨平台兼容性等。
下面将为大家推荐几款优秀的文本编辑器,帮助程序员提高开发效率。
一、Sublime TextSublime Text是一款强大且流行的文本编辑器,被广大程序员所喜爱。
它提供了简洁的界面和丰富的功能,支持多种编程语言的语法高亮、自动补全和宏命令等。
Sublime Text还支持插件扩展,可以根据个人需求进行定制。
其跨平台特性使得程序员可以在不同操作系统上进行开发,极大地提高了开发效率。
二、Visual Studio CodeVisual Studio Code是由微软推出的一款轻量级代码编辑器,其功能强大、易于使用,并且拥有丰富的插件生态系统。
Visual Studio Code支持多种编程语言,提供了智能代码补全、调试、版本控制等功能,使得程序员能够更加高效地进行开发。
它还具有丰富的主题可供选择,可以个性化编辑器的外观。
三、AtomAtom是GitHub开发的一款开源文本编辑器,被誉为“21世纪的编辑器”。
它具有可定制化的界面、快速的性能和丰富的插件生态系统。
Atom支持多种编程语言,提供了代码片段、文件目录树、项目管理等实用功能。
同时,Atom还具有Git和GitHub的集成,方便程序员进行代码版本管理。
四、Notepad++Notepad++是一款免费的文本编辑器,适用于Windows环境。
尽管它的功能相对较简单,但Notepad++提供了语法高亮、代码折叠、宏命令等功能,足以满足大部分程序员的需求。
在开发小型项目或进行简单的代码编辑时,Notepad++是一个不错的选择。
五、VimVim是一款老牌而强大的文本编辑器,它具有丰富的特性和高度可定制性。
Vim支持多种操作模式和快捷键,让用户能够快速编辑和导航代码。
数据结构实验指导书(王曙燕)
![数据结构实验指导书(王曙燕)](https://img.taocdn.com/s3/m/6f6a4ea01a37f111f1855b1a.png)
数据结构实验指导书(计算机科学与技术专业)淮南师范学院计算机与信息工程系2015.9前言数据结构是软件开发的基础,数据结构课程是软件工程、计算机科学与技术、网络工程、信息安全、物联网工程等专业的必修技术基础课程。
该课程是在学生学习高级语言程序设计课程基础上,使学生掌握各种常用数据结构的逻辑表示、存储表示、处理方法及应用算法设计,学会常用数据分类和数据查找的技术,对所设计的算法会做定量或定性的分析比较,培养学生的算法设计与分析的能力。
通过该课程的学习,使学生学会分析数据对象特性,选择合适的数据结构、存贮结构及相应的基本处理算法;初步掌握算法的时间空间复杂度分析技巧。
既为学生学习后继课程打好基础,也为将来软件开发提供理论指导。
数据结构具有很强的实践性,只有通过编程上机实验,才能真正领会数据结构的真正内涵,并灵活运用数据结构的基本知识提高自己的软件开发能力。
《数据结构》实验项目一览表课程名称:数据结构学时:16 适应专业:计算机科学与技术实验1:顺序表及其应用1.实验目的:(1)熟练掌握VC或Dev C++集成环境和程序开发步骤;(2)熟练掌握顺序表的插入、删除、查找定位等基本算法;(3)能利用顺序表解决简单的问题。
2.实验原理:线性表是最基本最常用的一种线性结构。
其特点是除了第一个元素和最后一个元素以外,其他数据元素都只有一个前驱和一个后继。
一个线性表中的数据元素应具有相同的描述性质,即属于同一个数据对象。
在实际应用中,必须将线性表中的数据存放在计算机中。
常用的存储方式有两种:顺序存储和链式存储,线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各个元素,使得数据元素逻辑上的相邻关系与物理上的相邻关系一致。
顺序存储的线性表又称顺序表,可以随机地存取表中的任意一个元素;也无需为表示结点之间的逻辑关系而额外增加存储空间。
但是,顺序表在进行插入和删除操作时需要移动大量的元素,影响运行的效率;同时表的最大容量事先无法估计,如果对表长估计的过长,可能会浪费空间,相反则可能会发生溢出的现象。
文本编辑器的程序设计及代码示例
![文本编辑器的程序设计及代码示例](https://img.taocdn.com/s3/m/bd4afd29571252d380eb6294dd88d0d233d43cb7.png)
文本编辑器的程序设计及代码示例在计算机科学领域,文本编辑器是一种用于编辑文本文件的应用程序。
它允许用户创建、修改和保存文本文件,并提供了一系列功能来方便用户进行编辑操作。
本文将介绍文本编辑器的程序设计原理,以及示范几个常见的代码示例。
一、程序设计原理文本编辑器的程序设计需要考虑以下几个方面:1. 用户界面设计:一个好的文本编辑器应具备直观友好的用户界面,提供各种操作选项和快捷键,使用户能够轻松地进行文本编辑。
2. 文本处理功能:文本编辑器应具备基本的文本处理功能,如插入和删除文本、查找和替换、拷贝和粘贴等。
这些功能需要通过合适的数据结构和算法来实现。
3. 文本格式化:文本编辑器应支持对文本进行格式化操作,如自动对齐、缩进、换行等。
4. 多标签支持:多标签功能允许用户同时打开多个文本文件,并在它们之间切换。
这要求程序设计中能够有效地管理多个文本文件的打开、关闭和切换。
二、代码示例下面是几个简单的代码示例,用于展示文本编辑器的一些基本功能。
1. 创建文本文件```pythondef create_file(filename):# 创建一个新的文本文件file = open(filename, "w")file.close()```2. 打开文本文件```pythondef open_file(filename):# 打开文本文件并返回文件对象 file = open(filename, "r")return file```3. 插入文本```pythondef insert_text(file, position, text): # 在指定位置插入文本file.seek(position)content = file.read()file.seek(position)file.write(text + content)```4. 删除文本```pythondef delete_text(file, start, end):# 删除指定位置的文本file.seek(start)content = file.read()file.seek(start)file.write(content[:end - start])```5. 查找和替换文本```pythondef find_replace(file, old_text, new_text):# 在文本中查找指定内容并替换file.seek(0)content = file.read()new_content = content.replace(old_text, new_text)file.seek(0)file.write(new_content)```6. 关闭文本文件```pythondef close_file(file):# 关闭文本文件file.close()```三、总结通过以上代码示例,我们展示了文本编辑器的一些基本功能,包括创建文件、打开文件、插入和删除文本、查找和替换文本以及关闭文件。
文本编辑器实现原理
![文本编辑器实现原理](https://img.taocdn.com/s3/m/de6a623e53ea551810a6f524ccbff121dd36c5f5.png)
文本编辑器实现原理
文本编辑器的实现原理可以简单概括为以下几步:
1.用户输入文本:用户在编辑器中输入文本,此时文本呈现在编辑器
的屏幕上。
2.文本存储:编译器将用户输入的文本存储在内存或外部存储设备中,以便用户在下次使用编辑器时可以继续编辑。
3.文本修改:当用户对文本进行修改时,编辑器会检测用户的操作
(比如插入、删除、修改等)并相应地更新文本的内容。
4.光标控制:编辑器需要追踪光标的位置并控制其移动,以便用户可
以编辑文本的任何部分。
5.用户界面:用户界面需要显示编辑器的各种工具和选项,比如字体、颜色、格式等。
6.保存和打开:编辑器需要提供保存和打开文本的功能,以便用户可
以在其他时间或设备上打开和编辑他们的文本。
总的来说,文本编辑器实现的原理就是通过对用户输入的文本进行存储、修改和展示等一系列操作,为用户提供方便快捷的文本编辑功能。
数据结构简易文本编辑器
![数据结构简易文本编辑器](https://img.taocdn.com/s3/m/a96b4ff0d0f34693daef5ef7ba0d4a7302766cb1.png)
数据结构简易文本编辑器在当今数字化的时代,文本编辑是我们日常工作和生活中经常进行的操作。
从撰写文章、编辑代码到简单的记事,都离不开文本编辑器的帮助。
而数据结构在文本编辑器的设计和实现中起着至关重要的作用,它决定了编辑器的性能、功能和用户体验。
首先,让我们来了解一下什么是数据结构。
简单来说,数据结构是一种组织和存储数据的方式,以便于对数据进行访问、修改和操作。
常见的数据结构包括数组、链表、栈、队列、树和图等。
在文本编辑器中,通常会用到多种数据结构来实现不同的功能。
对于一个简易的文本编辑器,我们可以使用线性的数据结构来存储文本内容。
一种常见的选择是使用字符数组。
字符数组可以直接存储文本中的字符,通过索引可以快速访问和修改特定位置的字符。
但这种方式存在一些局限性,比如当需要插入或删除大量字符时,可能会导致效率低下,因为需要移动大量后续的字符。
为了提高插入和删除操作的效率,我们可以考虑使用链表。
链表中的每个节点存储一个字符和指向下一个节点的指针。
在进行插入和删除操作时,只需要修改相关节点的指针即可,不需要移动大量的数据。
但链表的随机访问性能较差,如果需要频繁访问特定位置的字符,可能会比较耗时。
除了存储文本内容的数据结构,我们还需要考虑如何实现文本的编辑操作。
比如,当用户输入新的字符时,我们需要将其插入到适当的位置。
如果使用字符数组,我们可以先找到插入位置,然后将后续的字符向后移动,再将新字符插入。
如果使用链表,则可以直接在插入位置创建新的节点,并调整相关指针。
删除操作类似。
对于字符数组,需要将删除位置后的字符向前移动。
对于链表,只需修改相关指针,释放被删除的节点。
为了实现文本的查找和替换功能,我们可以使用一些搜索算法,比如顺序搜索或二分搜索。
如果文本内容是有序的,二分搜索可以大大提高查找的效率。
另外,撤销和重做功能也是文本编辑器中常见的需求。
为了实现这两个功能,我们可以使用栈来保存操作的历史记录。
当执行一个操作时,将其相关信息压入撤销栈。
分享10个程序员常用的的代码文本编辑器
![分享10个程序员常用的的代码文本编辑器](https://img.taocdn.com/s3/m/d65ae4036d175f0e7cd184254b35eefdc8d315b8.png)
分享10个程序员常⽤的的代码⽂本编辑器通常操作系统和软件开发包中都包含⽂本编辑器,可以⽤来编辑配置⽂件,⽂档⽂件和源代码。
下⾯是笔者总结的10个最好的免费代码⽂本编辑器:1.NOTEPAD++NOTEPAD++是⼀款免费⼜优秀的⽂本编辑器,⽀持在MS Windows环境下运⾏的多种编程语⾔。
NOTEPAD++⽀持超过50种编程、脚本和标记语⾔的语法⾼亮显⽰和代码折叠,能让⽤户迅速减⼩或扩⼤代码段以便查阅整个⽂档。
⽤户也可以⼿动设置当前语⾔,覆盖默认语⾔。
该程序还⽀持⾃动完成某些编程语⾔的API⼦集。
2.VIMVIM是⼀个可⾼度⾃由配置的⽂本编辑器。
它是Vi编辑器的改进版,同时也是免费软件。
该应有程序的建⽴是为了处理代码以及其他很多事情,⽽不只是为了写电⼦邮件和打开配置⽂件。
它允许你编辑⽂本并保存简单的⽂本⽂件,但它的主要功能是还是编辑代码。
它⽀持语法⾼亮显⽰和⾏编号,这是写程序必备的两个基本功能。
⽤户也可以改变界⾯颜⾊以便增加代码的可视性。
对于⽂本编辑,VIM这个程序囊括了多种语⾔的拼写检查器,并有建议如何更正拼写错误的能⼒。
甚⾄是当你正在编写代码的时候,它也能派上⽤场,因为该应⽤程序只检查不被识别为代码的⽂本。
当然你也可以快速地从这个错误跳到下⼀个以便更好地校对⽂本。
VIM是程序员和开发⼈员应对各种⽂本编辑的最佳选择。
3.GNU EmacsEmacs是⼀个可移植、可扩展、免费的⽂本编辑器。
Emacs提供了⼀些命令来管理语句和段落,⾼亮的语法使得源代码更易于阅读,以及“键盘宏”的⽅式来执⾏⽤户定义的编辑命令。
Emacs可以在若⼲个操作系统上运⾏,⽆论你使⽤的是哪⼀种机器类型。
这让程序员⾮常受⽤。
如果你使⽤的是通⽤的编程语⾔,Emacs还会为你提供模式以及相应的排版和布局,更加⽅便你编辑代码。
Emacs或许不是最简单的⼯具,但它绝对是最强⼤的编辑器之⼀。
相⽐vim,Emacs的启动时间更长,所需要的内存也更多。
数据结构-课程设计--简易文本编辑器
![数据结构-课程设计--简易文本编辑器](https://img.taocdn.com/s3/m/033217b9910ef12d2af9e7fd.png)
《数据结构》课程设计班级: 10计本2班姓名:邓寅森学号: 2010305202指导教师:杨老师完成日期: 2011年12月计算机科学与技术系课程设计评分表课程名称: 数据结构 简易文本编辑器教师签名:日期:一、需求分析1.1 问题描述传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。
计算机信息管理为人们的生活、工作提供了方便,提高了效率。
“简易文本编辑器”是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。
1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:(1)输入数据信息建立文本;(2)查询文本中满足要求的信息;(3)插入新的信息到文本中;(4)删除不再需要的文本信息;(5) 查看所有的文本信息。
二、概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:2.1 主界面设计为了实现简易文本编辑器的各项功能,设计了一个含有多个菜单项的主控菜单模块以操作系统的各项功能,以方便用户使用系统。
系统进入菜单运行界面如图所示:简易文本编辑器主菜单2.2 数据结构设计系统采用线性表的顺序存储结构表示和存储“简易文本编辑器”中的信息。
实现文本的输入,删除,插入,查找,显示功能。
2.3 系统功能设计运行程序,提示进入菜单,按“回车键”进入主菜单,再可以在主菜单上进行各项操作。
每次进入菜单,选择“1键”新建文本,然后才可以进行其他操作,或者按“0键”选择退出。
三、模块设计3.1 模块设计系统主要包含主程序模块和其它操作模块。
其调用关系如图所示。
模块调用示意图3.2 系统子模块及其功能设计本系统共设计了16个子模块,各程序的函数名及功能说明如下:1、/*由模式串nextval值*/void GetNextval(SqVString T,int nextval[])2、/*模式匹配KMP算法*/int KMPIndex(SqVString S,int pos,int next[],SqVString T)3、/*初始化串*/void InitString(SqVString *S,char *str)4、/*串插入*/int StrInsert(SqVString *S,int pos,SqVString T)5、/*串删除*/int StrDelete(SqVString *S,int pos,int len)6、/*求子串*/int SubStr(SqVString S,int pos,int len,SqVString *T)7、/*串连接*/int Concat(SqVString *S,SqVString T)8、/*串赋值*/int StrAssign(SqVString *S,char *value)9、void InputString() //新建10、void DeleteString()//删除11、void DeleteSubstring()//删除12、void InsertSubstring()//查找13、void DisplayString()//显示14、void cd()//进入界面15、void ts()//主菜单16、void tc()//退出3.3 系统模块之间的调用关系系统的16个子模块之间的主要调用关系所示:系统函数调用关系图四、详细设计4.1 数据结构设计系统采用线性表的顺序存储结构存储通讯录信息。
sublimetext structure
![sublimetext structure](https://img.taocdn.com/s3/m/88ad1b261fb91a37f111f18583d049649a660e68.png)
sublimetext structureSublime Text 是一种高级文本编辑器,具有漂亮的用户界面和强大的功能,特别适用于代码编辑和网页开发。
其结构设计得非常灵活和可扩展,使用户可以根据自己的需求进行定制和扩展。
Sublime Text 的结构主要包括以下几个方面:用户界面:Sublime Text 的用户界面非常简洁美观,采用了现代化的设计风格。
它提供了多种主题和颜色方案,用户可以根据自己的喜好进行选择。
同时,Sublime Text 还支持自定义快捷键和菜单,方便用户快速完成常用操作。
核心功能:Sublime Text 的核心功能包括代码高亮、代码折叠、自动补全、多窗口编辑等。
它还支持多种编程语言和文件类型,可以轻松地编辑和查看各种代码文件。
此外,Sublime Text 还提供了拼写检查、书签、项目管理等实用功能,方便用户进行代码管理和维护。
插件系统:Sublime Text 的插件系统是其最为出色的特点之一。
用户可以通过安装插件来扩展编辑器的功能,实现更多的自定义和个性化需求。
插件可以通过 Package Control 进行安装和管理,非常方便。
插件的开发也非常简单,Sublime Text 提供了完整的 Python API,使得开发者可以轻松地编写自己的插件。
跨平台支持:Sublime Text 是一个跨平台的编辑器,支持 Windows、Linux、Mac OS X 等操作系统。
这使得用户可以在不同的平台上使用相同的编辑器和配置,提高了工作效率和便利性。
综上所述,Sublime Text 的结构设计非常灵活和可扩展,用户可以根据自己的需求进行定制和扩展。
其强大的功能和插件系统使得它成为了一款非常优秀的文本编辑器和代码编辑器。
文本编辑器设计
![文本编辑器设计](https://img.taocdn.com/s3/m/084e6cf0f705cc17552709ab.png)
四川师范大学成都学院高级语言程序课程设计文本编辑器设计学生姓名xxx学号x所在学院x专业名称x班级x级x班指导教师x成绩x学院二○一四年十二月课程设计任务书文本编辑器设计内容摘要:当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能,更专业的软件帮助我们完成工作,从而提高了工作效率。
目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行C++程序语言的编译与运行很少,不能更好的适应当前用户的要求。
本设计所完成的文本编辑器功能是针对学习C++程序语言,因此我们利用C++程序设计虚拟机和软件用户以及使用者的应用过程形成一整套完整的编写代码,编译,运行。
本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏,还有链接C++语言虚拟机实现编译与运行。
操作系统为Windows 7。
关键词:文本编辑器C++程序语言编译运行The design of text editorAbstract:Today, the rapid development of computer and network technology, society is rapidly advancing to the information society, we need a more intelligent, more professional software to help us to finish the work, so as to improve work efficiency.At present, many text editors species, to provide the function of many, but can satisfy the compiling and running the user to achieve a variety of functions and the C++ programming language is very few, can better adapt to the requirements of the current user. The completion of the design of the text editor function is for learning C++ programming language, so we use the C++ program design of virtual machines and software users and users of the application process of form a complete set of code, compile, run. The development of the text editor includes interface window menus and toolbars, and link the C + + programming language virtual machine implementation compile and run.The development of the text editor use VC++6.0 as the development tool, and the operating system is Window 7.Keywords:The text editor C + + programming language compile function目录前言 (1)1 课程设计的意义及目的 (1)2 文本编辑器总体结构设计 (2)2.1 文本编辑器功能 (2)2.1.1 文本编辑器的基本功能 (2)2.2 总体结构 (2)3 文本编辑器各功能模块 (4)3.1需求分析 (4)3.2 功能模块 (4)4 软件结构设计 (5)4.1 撤销 (5)4.2 删除 (6)4.3 剪切 (7)4.4 复制 (9)4.5 粘贴 (10)5 操作步骤 (12)5.1打开文本编辑窗口 (12)5.2输入文本 (12)5.3删除文本内容 (12)5.4在编辑里选择撤销 (13)5.5选中文本,编辑里选复制 (13)5.6在编辑里选择粘贴 (14)5.7再次选中文本内容,剪切 (14)5.8再粘贴 (15)结束语 (16)附录 (17)文本编辑器前言在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。
文本三剑客详解
![文本三剑客详解](https://img.taocdn.com/s3/m/c7ab470c3868011ca300a6c30c2259010202f389.png)
文本三剑客详解在日常工作和学习中,我们经常会遇到需要处理大量文本数据的情况。
为了高效地处理和分析文本,我们需要借助一些强大的工具。
本文将详解三款常用的文本处理工具,它们被称为“文本三剑客”。
一、正则表达式正则表达式是一种强大的文本匹配工具,它可以用来匹配、查找、替换和提取文本中的特定模式。
正则表达式由一系列字符和特殊字符组成,可以通过使用通配符、字符组、量词和边界等元字符来实现不同的匹配模式。
例如,我们可以使用正则表达式来匹配邮箱地址、电话号码、身份证号码等特定格式的文本。
正则表达式还可以用来提取网页中的链接、图片等信息,并进行相应的处理和分析。
二、文本编辑器文本编辑器是用来编辑和处理文本文件的工具。
它可以打开、编辑和保存各种类型的文本文件,如txt、csv、html等。
文本编辑器具有语法高亮、代码折叠、查找替换等功能,使得我们能够更加方便地编辑和查看文本内容。
除了基本的文本编辑功能,一些高级文本编辑器还提供了插件和扩展功能,可以实现代码自动补全、代码格式化、代码片段等功能,提高我们的工作效率。
三、命令行工具命令行工具是通过命令行界面来操作的文本处理工具。
它可以通过输入命令和参数来实现不同的操作,如文件查找、文件比较、文件合并等。
命令行工具通常提供了丰富的命令和选项,可以实现各种复杂的文本处理任务。
例如,我们可以使用命令行工具来统计文本文件中特定字符的出现次数,计算文本文件的行数、字数和词数,以及对文本进行排序、去重、过滤等操作。
正则表达式、文本编辑器和命令行工具是我们处理文本的三剑客。
它们分别具有不同的功能和特点,可以根据实际需求选择合适的工具来处理和分析文本数据。
在实际应用中,我们可以结合使用这三款工具,发挥它们的优势,提高我们的工作效率和数据处理能力。
无论是处理文本数据、提取信息,还是进行文本分析和挖掘,这三款工具都可以帮助我们快速、准确地完成任务。
因此,掌握正则表达式、熟悉文本编辑器的使用方法,以及熟练使用命令行工具是我们提高文本处理能力的关键。
编程三级试题
![编程三级试题](https://img.taocdn.com/s3/m/39978461bc64783e0912a21614791711cc79792c.png)
由于您没有提供具体的编程三级试题,我将根据一般性的编程三级考试要求,提供一个回答示例。
请注意,这只是一个示例,具体的试题可能会有所不同。
题目:设计一个简单的文本编辑器一、简答题(500字以上)在本次考试中,我们将设计一个简单的文本编辑器。
文本编辑器是一种常用的软件工具,它允许用户输入、编辑和保存文本文件。
本次设计的文本编辑器将具备以下功能:1. 打开和保存文件:用户可以打开已有的文本文件并保存修改后的内容。
2. 基本的编辑功能:文本编辑器应提供基本的编辑功能,如复制、粘贴、剪切、撤销和重做等。
3. 查找和替换:用户可以使用此功能在文本中查找和替换特定的字符或字符串。
4. 文本格式化:用户可以设置字体、大小、颜色等文本格式。
下面是一个使用Python语言实现的简单文本编辑器代码框架:```pythonclass TextEditor:def __init__(self):self.text = ""self.history = []def open_file(self, filename):with open(filename, "r") as file:self.text = file.read()self.history.append(self.text)def save_file(self, filename):with open(filename, "w") as file:file.write(self.text)def cut(self):pass # 在这里添加剪切功能代码def copy(self):pass # 在这里添加复制功能代码def paste(self):pass # 在这里添加粘贴功能代码def undo(self):if len(self.history) > 0:self.text = self.history.pop()print("撤销操作成功")else:print("没有更多历史记录")def redo(self):if len(self.history) > 1:self.history.append(self.text)self.text = self.history[-2] # 仅展示上述代码的伪代码部分,真正的代码会依赖于你选择的实现方式print("重做操作成功")else:print("没有撤销历史")def format_text(self): # 根据具体需求实现这部分功能,比如使用python内置库或其他库来改变字体大小颜色等pass # 示例为设置字体为Times New Roman,字号为12px:self.text = self.text.replace('\n', "\nTimes New Roman ", 1, 10)# 需要实现更改文本颜色的方法(需要用户输入颜色代码)等。
实现一个简单的文本编辑器
![实现一个简单的文本编辑器](https://img.taocdn.com/s3/m/45f87f78b80d6c85ec3a87c24028915f814d8462.png)
实现一个简单的文本编辑器一个文本编辑器是一款用于编辑文本文件的应用程序。
它提供了基本的文本编辑功能,例如输入、删除、复制、粘贴和保存文本。
一个简单的文本编辑器可以有以下基本特性:1.文本输入和删除功能:用户可以通过键盘输入文本内容,并且可以通过删除键或退格键删除文本。
2.复制和粘贴功能:用户可以选择文本块,并将其复制到剪贴板中。
然后,可以将剪贴板中的文本粘贴到编辑器中的任何位置。
3.文本格式化:用户可以对文本进行格式化,例如设置字体颜色、字体大小、字体样式(例如加粗、斜体等)等。
4.搜索和替换功能:用户可以搜索编辑器中的文本,找到并替换指定的文本。
5.保存和打开文本文件:用户可以将编辑器中的文本保存成一个文本文件,并且可以打开一个已经存在的文本文件进行编辑。
6.撤销和重做功能:用户可以撤销之前的操作,并重做已经撤销的操作。
7.拼写检查和自动纠错功能:编辑器可以检查用户输入的文本中的拼写错误,并根据语言规则自动纠正错误。
8.自动保存:编辑器可以在一定时间间隔内自动保存用户的文件,以防止意外的程序崩溃或电源故障导致数据丢失。
9.多窗口和标签:用户可以同时打开多个编辑器窗口,并在每个窗口中进行不同的编辑。
10.快捷键:编辑器可以提供一些常用功能的快捷键,以方便用户的操作。
11.缩进和对齐:编辑器可以提供自动缩进和对齐功能,以使文本整齐明了。
12.行号和标记:编辑器可以显示行号,并允许用户通过添加标记(例如断点)来快速导航到特定行。
13.支持多种编程语言:编辑器可以针对不同的编程语言提供特定的功能,例如语法高亮、代码折叠等。
当然,上述的特性只是一个简单文本编辑器的基本要求,实际上,现代化的文本编辑器具有更多更强大的功能和特性。
轻量级富文本编辑器wangEditor源码结构介绍
![轻量级富文本编辑器wangEditor源码结构介绍](https://img.taocdn.com/s3/m/3964971da21614791711286c.png)
从我发布wangEditor到现在,大概有七八个月了,随着近期增加的插入视频,表情,地图这三个功能,目前为止基本的功能已经大体完善了。
这期间也修改了几个bug,都是各位网友反映的。
至于程序是不是已经很稳定了,我不敢说。
毕竟应用的人不是特别多,目前只有几十个关注wangEditor的人在应用。
他们会偶尔提出一些bug,不过只要告诉我,我会第一时间解决,至少大家对我修改bug增加功能的速度和态度,还是比较认可的。
根据github记载,目前有105个commits,即我已经提交了105次代码更新,这个数量也会继续增加。
大家有bug,有需求可以通过QQ群向我提交。
2. 介绍源码结构wangEditor.js源码目前2200多行,用书写文字书写博客的方式介绍它的结构,还真不是一件简单的事儿。
所以,这里我就长话短说,尽量简单的介绍一下重点,不要搞的太罗嗦,否则大家最后会不耐烦的。
如果让我自己对这个源码的设计和架构做一个评价的话,我会打70分。
它并不是完美的,但是它已经满足了我基本的需求。
比方说,我最近新增的几个功能(插入视频,地图,表情)都是通过修改其中的配置项增加上去的,而没有改动源码中的核心部分。
开放封闭原则——对扩展开放,对修改封闭,我想我已经基本做到了这一点。
最后,我分享wangEditor源码设计的目的,为的是让大家给一些意见。
提出一些疑问,一些建议,或者我目前还没有意识到的一些问题。
总之,我是希望这个软件越做越好。
3. 一个jQuery插件wangEditor是一款jQuery插件,也是基于jquery开发的(不理解jquery插件的同学,请自行补课,本文不讲)。
定义一个jquery插件其实很简单,wangEditor.js源码的最后几十行定义了。
//------------------------------------生成jquery插件------------------------------------$.fn.extend({/** options: {* $initContent: $elem, //配置要初始化内容* menuConfig: [...], //配置要显示的菜单(menuConfig会覆盖掉hideMenuConfig)* onchange: function(){...}, //配置onchange事件,* uploadUrl: 'string' //图片上传的地址* }*/'wangEditor': function(options){if(this[0].nodeName !== 'TEXTAREA'){//只支持textareaalert('wangEditor提示:请使用textarea扩展富文本框。
27款优秀的文本编辑器
![27款优秀的文本编辑器](https://img.taocdn.com/s3/m/10c301207275a417866fb84ae45c3b3566ecdd52.png)
27款优秀的⽂本编辑器经常跟代码打交道的⼈,除了⾃⼰所掌握的代码知识之外,我想他们最需要的⼯具之⼀,应该是⼀款得意的⽂本编辑器了。
好的⽂本编辑器⼀般都⽀持语法⾼亮功能,⽀持多语⾔,⽂件⽐较、插件、代码⽚断助⼿、预览以及FTP管理。
⼀些编辑器甚⾄为⼀个完全的开发环境提供了全⾯的功能和特性。
这⾥是我收集的27款免费的⽐较优秀的⽂本编辑器,适⽤在Windows,Mac或Linux等操作系统环境下⼯作,其中有些还可同时兼容多个操作系统。
Notepad++Notepad++ 是⼀款很有特⾊的⽂本编辑器:1、内置⽀持27 种语法⾼亮度显⽰,⽀持⾃定义语⾔;2、可⾃动检测⽂件类型,根据关键字显⽰节点,节点可⾃由折叠/打开;3、可同时打开两个窗⼝,在分窗⼝中⼜可打开多个⼦窗⼝,允许快捷切换全屏显⽰模式(F11),⽀持⿏标滚轮改变⽂档显⽰⽐例;4、其他特点包括:邻⾏互换位置、宏功能等等。
⼯作环境:WindowsBBEditBBEdit是全球领先的专业HTML和⽂本编辑器,功能包括grep图样匹配,搜索和替换多个⽂件,项⽬定义,功能导航和众多的源代码语⾔的语法着⾊,⽀持代码折叠,FTP和SFTP打开和保存等。
⼯作环境:Mac OS。
Boxer Text EditorEditra是⼀个⽀持多平台的⽂本编辑器,可以⽀持基本语法和⼆⼗种语⾔。
它使⽤⽅便,可以⽤颜⾊标注重点部分,⽀持进⾏内嵌式编辑,也可以进⾏代码编辑。
emacsEmacs不仅仅是⼀个编辑器,他是⼀个整合环境,或可称它为集成开发环境,这些功能如让使⽤者置⾝于全功能的操作系统中。
能够在当前⼤多数操作系统上运⾏,包括类Unix系统、MS-DOS、Microsoft Windows以及OpenVMS等。
Emacs既可以在⽂本终端也可以在图形⽤户界⾯(GUI)环境下运⾏。
FraiseFraise是⼀款免费专门为MacOSX10.6开发的⽂本编辑器,并且⾮常易⽤和强⼤。
程序设计基础教案
![程序设计基础教案](https://img.taocdn.com/s3/m/45549a46640e52ea551810a6f524ccbff121ca3d.png)
程序设计基础教案一、教学目标1. 理解程序设计的基本概念和原理。
2. 掌握常用的编程语言和工具。
3. 学会编写简单的程序,解决实际问题。
二、教学内容1. 程序设计概述程序设计的定义和意义程序设计的基本过程和步骤2. 编程语言和工具常见的编程语言及其特点编程环境的搭建和使用3. 算法和数据结构算法的定义和特点常见数据结构及其应用4. 程序设计的基本概念变量、常量和数据类型控制结构:条件语句、循环语句函数和模块化编程5. 程序设计实践编写简单的程序:计算器、排序算法等调试程序,解决问题三、教学方法1. 讲授法:讲解程序设计的基本概念、原理和语法。
2. 案例教学法:通过实际案例,分析并编写程序。
3. 实践教学法:让学生动手编写程序,培养实际操作能力。
4. 讨论法:分组讨论,解决问题,分享经验。
四、教学评估1. 课堂问答:检查学生对程序设计基本概念的理解。
2. 编程作业:评估学生的编程能力和实践技能。
3. 小组项目:评价学生的团队协作能力和问题解决能力。
4. 期末考试:综合测试学生的程序设计水平。
五、教学资源1. 教材:程序设计基础教材。
2. 课件:教学PPT,生动展示程序设计知识点。
3. 编程环境:集成开发环境(IDE)和相关工具。
4. 在线资源:编程教程、案例和实践项目。
5. 辅助工具:代码调试器、版本控制工具等。
六、教学安排1. 课时:共计32课时,每课时45分钟。
2. 课程安排:第1-4课时:程序设计概述及编程语言和工具第5-8课时:算法和数据结构第9-12课时:程序设计的基本概念第13-16课时:程序设计实践第17-20课时:综合案例分析第21-24课时:编程技巧与优化第25-28课时:项目实践第29-32课时:期末复习与考试七、教学注意事项2. 关注学生的个体差异,因材施教,提高教学质量。
3. 鼓励学生积极参与课堂讨论,提高沟通能力和团队协作精神。
4. 注重实践教学,让学生动手编写程序,培养实际操作能力。
简单文本编辑器-设计报告
![简单文本编辑器-设计报告](https://img.taocdn.com/s3/m/7c3edcd584254b35eefd3431.png)
简易文本编辑器●需求分析该简易文本编辑器具有图形菜单界面,包括打开,查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除,显示文本信息,保存文本信息等等功能并可正确存盘、取盘,正确显示总行数。
●概要设计为实现数据的有序存储,该编辑器用字符数组来存储输入的信息。
数组是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。
其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。
在编辑器的主界面中应有如下提示信息(包括功能的完成的基本思想):1) 清空以前的文本信息:将用数组存的数据内容全部置为0;2) 显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上;3) 编辑信息:通过对数组的直接输入操作得到字符数组,这要求数组有绝对大的空间,而且每一次的输入完毕必须有相应的数组下表地址的记录,应此建立一个全局变量ntext记录;4) 查找信息:通过循环在数组中找到所需要的信息;5) 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;6) 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;7) 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息;8) 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;9) 退出编辑器:通过确认是否保存安全退出。
10)程序中主要的函数为:子串查找在朱串的位置,程序如下: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); //模式匹配不成功}详细设计1.包括的头文件#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define MAX 10000#define _CRT_SECURE_NO_DEPRECATE //在vs中取消warning的警告2.相关函数原型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; //文本编辑的位置3./*打开文件模块*/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();}4./*保存模块*/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;}}}}5./*初始化模块*/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); //模式匹配不成功}6./*菜单显示模块*/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;}7./*查找*/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);}}8./*显示模块*/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);}9./*输入模块*/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);}10./*删除*/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);}}11./*插入*/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;}12./*替换*/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);}13./*退出*/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.界面设计2主界面的设计如图,比较单调。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:【2】.简易文本编辑器要求:1) 具有图形菜单界面;2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除3) 可正确存盘、取盘;4) 正确显示总行数。
1需求分析一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。
2概要设计为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。
顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。
其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。
在编辑器的主界面中应有如下提示信息:⑴清空以前的文本信息:将用数组存的数据内容全部置为0;⑵显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上;⑶编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数;⑷替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;⑸插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;⑹移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息;⑺删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;⑻退出编辑器:显示感谢使用该软件并退出。
3 详细设计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; //文本编辑的位置4用户使用说明⑴清空以前的文本信息:将用数组存的数据内容全部置为0;⑵显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上;⑶编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数;⑷替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;⑸插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;⑹移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息;⑺删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;⑻退出编辑器:显示感谢使用该软件并退出。
5调试分析/测试结果文本编辑器主界面主界面功能,如图2—2所示。
图2—2 文本编辑器主界面系统功能⑴输入文本信息功能,如图2—3所示。
图2—3 输入界面⑵查找文本信息,如图2—4所示。
图2—4查到功能界面⑶显示文本信息,如图2—5。
图2—5{4}删除操作,如图2--6图2—6 (删除123)功能{5}插入操作如图2—7所示。
图2—7 (在789前插入123)界面{6}替换文本内容,如图2—8所示。
图2—8 (替换456为abc)的内容6心得体会程序的运行结果与理论推导结果完全吻合,即该算法与程序设计满足课程设计要求。
该程序的主要优点是简单易懂,不存在理解上的障碍,也很自然地能想到这种解法。
通过数据结构的课程设计使我们对所学知识有了更好的理解,也增强了大家的动手能力。
同时也发现了自己的很多不足之处,对知识的应用能力很是欠缺,应用软件的能力及编程水平与课程要求更是存在很大的差距。
7程序#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define MAX 10000#define _CRT_SECURE_NO_DEPRECA TE //在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);}。