欢迎来到天天文库
浏览记录
ID:48810421
大小:250.00 KB
页数:20页
时间:2020-01-27
《删除字符的程序实.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、删除字符的程序实现简单介绍删除字符,在计算机上应用很普遍,比如在处理文本文档的时候就时常会用到删除操作,比如“剪切”操作,可以当做是删除同时复制。那么删除操作是怎么实现的呢?对于删除字符:首先,我们要找到那个需要被删除的字符(或字符串,以下称为字符);然后,我们可以把文本中的那个字符替换为空;如果仅仅替换为空,就像切除某种不必要的东西;所以,我们要做的是让“伤口”愈合,把后面的字符向前移动以填补空位,就像医学上的“植皮”;简化以上步骤,可以变成:找到字符,然后直接将字符替换为之后的字符。用图像来说明:查找字符串的代码:char*Sea
2、rch(charstr[],chardstr[])/*返回找到的第一个字符串的位置(指针)*/{intn;/*n用于记录字符的长度*/n=strlen(dstr);for(intk=0;str[k;k++])for(inti=k,intj=0;str[i]&&dstr[j]&&str[i]==dstr[j];i++,j++){if(j==n)return&str[i+1-n];}returnNULL;}替换字符的函数voidchange(char*p,intn){while(*(p+n)){*p++=*(p+n)++;*p=‘ ’;
3、}}从上面可看出删除字符的函数可以这样写:voiddelete_str(charstr[],charc){inti,j;for(i=j=0;str[i]!=' ';i++)if(str[i]!=c)str[j++]=str[i];str[j]=' ';}流程图完整代码(删除字符串)#include#includemain(){inti,j,k,n2;charstring[100],s[20];printf("输入字符串:");gets(string);printf("输入要删除的子串:
4、");gets(s);完整代码(删除字符串)k=0;n2=strlen(s);for(i=0;string[i];i++)//删除字符串{for(k=0,j=i;s[k]&&string[j]&&s[k]==string[j];k++,j++);//当出现字符串与要删除的字符串相同时进入循环if(k==n2)//当完全相同的时候进入以下循环完整代码(删除字符串){for(k=i;string[j];)//若字符串结束则,结束循环string[k++]=string[j++];//将第i个字符替换为第i+n2的字符,即被删除的字符后的字
5、符string[k]=' ';//将下一个字符替换为空,以防止意外i=0;//又从头开始循环,直到没有该字符串}elsei=j;//如果不是完全相同,则继续计数}完整代码(删除字符串)puts(string);getchar();}运行结果提到删除,我们很容易想到链表。对于链表结点的删除,链表只需改变成员指针的指向。操作比数组方便的多,但是为什么不用链表呢?因为:如果使用链表,那么,每储存一个字符至少需要一个字节来储存字符和四个字节的空间来储存指针。这样虽然操作简单,但就太浪费空间了!对于数组的弊端:对于数组,每出现一次被删除字符,
6、就意味着,在它以后的所有数字都会被一次移动一次。而且,当所有将被删除的字符都位于字符串末尾时,移动次数最少。全都位于前端时次数最多。如果假设总字符数为m,被删字符数为n,次数为t。容易算出:次数最少时:t=n!最多是:t=m!-n!可以看出当n增大的时候,t迅速增大。而如果用链表,t=n。将会远远小于用数组时的移动次数。但是在我们真正使用删除字符的时候,不可能输入太多的字符,所以采用数组方式。没有无用的数据结构,只有不适合的结构。谢谢
此文档下载收益归作者所有