?下面是我大学期间所做的数据结构课程设计,用c语言实现的简易文本编辑器,回头看起来做的比较简单,供学弟学妹参考。
?
1.设计目的
简易文本编辑器是一个面向用户的系统服务程序,广泛用于源程序的输入、删除、替换、查找、修改等一系列操作,甚至用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色,是一个比较实用的应用软件。该程序是专门为用户做文本编辑而精心设计的,可以满足文本操作的大部分要求。
2.设计内容和要求
(1)读取(文本)文件建立新字符串(2)查看源(文本)文件内容和组成信息(3)查看当前字符串(4)查看当前字符串的组成信息(5)查找指定位置开始的指定长度字符串(6)查找指定的字符串的位置(7)在当前字符串指定的位置插入字符串(8)从当前字符串中删除指定的子字符串(9)替换当前字符串指定的子字符串(10)保存对(文本)文件的修改 (11) 另存为(文本)文件 (12) 退出程序
3.本设计所采用的数据结构
在该程序中用到的数据结构只有链表
程序中所使用的基本操作和存储结构均采用串的链式存储结构,并定义相应的操作函数。
typedef struct _String//定义链串结构
{char character ;//组成串的字符( 数据域 )
struct _String* next ;//指向下一串结构的指针( 链域 )
} String ;//串类型
4.功能模块详细设计
4.1详细设计思想
该程序所使用的基本操作和存储结构为采用串的链式存储结构,并定义相应的操作函数。文本编辑的操作调用以下函数并结合库函数来实现文本编辑的图形界面。
定义链式存储结构:
typedef struct _String//定义链串结构
{
char character ;//组成串的字符( 数据域 )
struct _String* next ;//指向下一串结构的指针( 链域 )
} String ;//串类型
定义串的信息结构:
typedef struct _StringInformation//定义串信息结构
{
String* str ;//链串首结点
int letters_count ;//字母个数
int figures_count ;//数字个数
int space_count ;//空格个数
int endline_count ;//换行符个数
int others_count ;//其他字符个数
int characters_count ;//总字符个数
} StringInformation ;//串信息类型
定义串的引索结构:
typedef struct _Index//定义串索引结构
{
int sub_index ;//子串在其父串的位置( 或索引 )
struct _Index* next_index ;//指向子串的下一个串索引结构的指针
} Index ;//串索引类型
?
所要调用的子函数有:
int StringToUnsignedInt( char* s , int max );//字符串转换成无符号整数
void InitalizeStringInformation( StringInformation* SI , int initalizeAll ) ;//串信息初始化
C语言实现的简易文本编辑器_c语言编辑器
void CreatStringFromArray( String** S , char* cString ) ;//从字符数组建立字符串
int CreatStringFromFile( String** S ,char* filePath ) ; //从文件建立字符串
int StringLength( String* S ) ;//求串长
int StringCompare( String* S1 , String* S2 ) ;//串比较
void StringCopy( String** targetString , String* sourceString ) ;//串拷贝
void SubString(String* S ,int index ,int subLength ,String** subS ) ;//子串提取
int SubStringIndex( String* S , String* subS ) ; //求子串在父串首次出现的位置
int StringInsert( String** S , int index , String* insertedString ) ; //串插入
int SubStringDelete( String** S , int index , int subLength ) ; //子串删除
void PrintString( String* S ) ;//串输出
void PrintIndex( Index* subIndex ) ;//子串的所有索引输出
void PrintStringInformation( StringInformation* SI ) ;//串组成信息输出
void SaveToFile( String* S , char* filePath ) ;//保存字符串到文件
void DestroyString( String** S ) ;//串销毁
void DestroyIndex( Index** subIndex ) ;//子串索引销毁
(1)读取(文本)文件建立新字符串
该函数的设计思想为从字符数组建立字符串或者从文件建立字符串。就文件建立字符串而言,首先要定义一个串StringInformation S,tempString = S.str,然后打开计算机中的txt文件gets( filePath ), 调用函数CreatStringFromFile( &S.str , filePath )将filePath写入字符串S中来实现 。
(2)查看源(文本)文件内容和组成信息
先要调用函数PrintString( Source.str )来进行串输出,然后调用子函数PrintStringInformation( &Source )将串组成信息输出,最后将串销毁DestroyString( &Source.str )。
(3)查看当前字符串
先要清屏system( "cls" );然后调用子函数PrintString( S.str )将串S输出。
(4)查看当前字符串的组成信息
调用子函数PrintStringInformation( &S )将串S的组成信息输出
(5)查找指定位置开始的指定长度字符串
先输入字串的起始位置gets( input ),position = StringToUnsignedInt( input , -1 ) 调用该函数将input转换成无符号整数并将值赋予position;然后再输入子字符串的长度gets( input ),subLength = StringToUnsignedInt( input , -1 )调用此函数将input转换成无符号整数并将值赋予subLength,然后调用该函数 SubString( S.str , position , subLength , &subString )进行子串提取;
(6)查找指定的字符串的位置
首先要输入将要查找的字符串gets( cString ),CreatStringFromArray( &subString , cString )然后调用该函数将cString置为串subString,调用SubStringIndexAll( S.str , subString , &subIndex )输出子串subString在父串S中出现的所有位置,然后销毁subString 。
(7)在当前字符串指定的位置插入字符串
首先请输入将插入字符串的位置 gets( input ),然后调用函数position = StringToUnsignedInt( input , -1 )将input转换成无符号整数并将值赋予position;
C语言实现的简易文本编辑器_c语言编辑器
再输入将插入的字符串 gets( cString ),CreatStringFromArray( &newString , cString )用字符数组建立字符串法建立newString,然后再调用函数StringInsert( &S.str , position , newString )将newString插入文件S.str中,然后再销毁newString。
(8)从当前字符串中删除指定的子字符串
首先输入将删除的子字符串gets( cString ),然后调用函数CreatStringFromArray( &subString , cString )建立新的字符串subString,调用函数count = SubStringIndexAll( S.str , subString , &subIndex )输出子串subString在父串S中出现的所有位置。
然后输入将要删除的子字符串的位置gets( input ),position = StringToUnsignedInt( input , -1)调用该函数将input转换成无符号整数并将值赋予position ; 再调用函数将子字符串删除SubStringReplaceSingle( &S.str , position , subString , NULL )。
(9)替换当前字符串指定的子字符串
先输入将被替换的子字符串 gets( cString ) ,CreatStringFromArray( &subString , cString )调用函数将cString生成字符串subString ,调用函数SubStringIndexAll( S.str , subString , &subIndex )输出子串subString在父串S中出现的所有位置。
再输入将替换的子字符串的位置gets( input ),将输入的input转换为无符号整形position = StringToUnsignedInt( input , -1 ); 然后输入一个字符串以替换上面的字符串 gets( cString ),调用CreatStringFromArray( &replaceString , cString )将输入的cString CreatStringFromArray( &replaceString , cString )置成新串replaceString,然后调用函数SubStringReplaceSingle( &S.str , position , subString , replaceString )替换子字符串 ,然后销毁subString。
(10)保存对(文本)文件的修改
调用函数SaveToFile( S.str , filePath )将已修改的文本保存
(11)另存为(文本)文件
先输入将另存为的文件的绝对路径 gets( anotherPath )。然后再调用函数SaveToFile( S.str , anotherPath )另存文件
(12)退出程序
调用函数DestroyString( &S.str )将字符串S销毁,退出程序