文本编辑器代码分析(续1)

一、简单文本编辑器程序

1、数据结构

  typedef struct _list	//行表结构
{ 
 char data[80];		//记录一行字符
int length;		//记录一行字符长度
 struct _list *next;	// 后继指针
struct _list *pre;	//前趋指针
int row;		//记录整篇文章的行数
}LinkList;
int  NUM,C,N; //定义全局变量,Num用来记录行号,C用来记录子串在主串中出现的总次数
LinkList *head; //定义全局变量*head,文章首行头指针
    主要还是链表存储,80个字符

2、Create()文本内容输入

for(j=0;j<LINK_SIZE;j++)// 控制一页
        { for(i=0;i<80;i++) //控制一行
         {  ch=getchar(); //接收输入字符
            temp->data[i]=ch; //给temp指向的行赋值
	••••
           temp->length++;//行中字符长度加1
           if(ch=='#')
           {NUM=j; break; //文章结束时,Num来记录整个文章的行数
 }}}

#define Link_Size 100

       这里面输入一段文字,getchar()并不需要等,输入过程中就会拷贝进去,输入"#"后,则会跳出循环

       如果输入超过80个字符,则malloc一个字串结构,加入链表中,另外会初始化这char [80]个字符='\0'。

3、PrintWord()文本输出

       输出的话,就以'#'作为标志,一个字符一个字符printf。

 for(j=0;j<=NUM&&p!=NULL;j++)
	{=for(i=0;(i<80)&&(p->data[i])!='#';i++)
		{=printf("%c",p->data[i]);}
		p=p->next; }



 

4、CountWord()文本内容统计

      

for(j=0;j<=NUM;j++)
  {  	 for(i=0;(i<80)&&(temp->data[i])!='#';i++)
{                ch=temp->data[i];
		 if((ch>='A')&&(ch<='Z'))    WORD++;//大写字母
		 else if((ch>='a')&&(ch<='z'))    word++;//小写字母
		 else if((ch>='0')&&(ch<='9'))     num++;//数字
		 else if(ch==' ')            space++;//空格键
 else  if(ch==33||ch==34||ch==39||ch==44||ch==46||ch==58||ch==59||ch==63)
	{punct++;}//分别是!\"\'\,\.\:\;\? 其中\是分隔符
     }
sum=WORD+word+num;
 }
         主要看是否落在相应的字符区间

5、SearchWord()文本内容查找

方法:每个字符去匹配,即可。

        char Data[20];//存储要搜索的字符串,定长20

if((temp->data[j])==Data[k])  

 k++;//将输入的查找字符与链表中信息比较,找到第一个相同的字符

            else if(Data[k]!='\0')

                     {j=j-k; k=0; } // //从主串第j-k个位置重新查找

            if(Data[k]=='\0')

                     {sum++;//此字符出现的次数加1

                      j=j-k+1; //j记录下该字符串出现的位置

                      printf("\t\t%d次出现在第%d行第%d\n",l,i+1,j+1);

                      l++;

                      k=0;

                     continue;}

         temp=temp->next; //指向下一行

 

6、DeleteWord()文本内容删除

         首先找到字符串所在位置,再将后面的字符往前移一行,根据定位的信息,如果不是最后一行,则将后面的文字链往前移动。是最后一行,则只须拷贝字符串。

          代码略。

7、InsertWord

        插入也是如此。判断够不够,申请一个文字链,把文字往后面移动。

参考:1、简单的文本编辑器程序报告

2、anscii

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值