【php精品源码栏目提醒】:网学会员鉴于大家对php精品源码十分关注,论文会员在此为大家搜集整理了“【精品】删除字符的程序实 - 其它资料”一文,供大家参考学习
删除字符的程序实现 简单介绍 删除字符,在计算机上应用很普遍, 比如在处理文本文档的时候就时常会用 到删除操作,比如“剪切”操作,可以当做是删除同时 复制。
那么删除操作是怎么实现的呢?对于删除字符:1. 首先,我们要找到那个需要被删除的字符 (或字符串,以下称为字符);2. 然后,我们可以把文本中的那个字符替换 为空;3. 如果仅仅替换为空,就像切除某种不必要 的东西;所以,我们要做的是让“伤口” 愈合,把后面的字符向前移动以填补空位, 就像医学上的“植皮”; 简化以上步骤,可以变成: 找到字符,然后直接将字符替换为之后的 字符。
用图像来说明: 查找字符串的代码:char Searchchar str char dstr /返回找到的第一个字符串的位置(指 针)/ int n /n用于记录字符的长度/ nstrlendstr for int k0strkk for int ikint j0 stridstrjstridstrj ij if jn return stri1-n return NULL 替换字符的函数void changecharp int n while pn p pn p‘0’ 从上面可看出删除字符的 函数可以这样写:void delete_strchar str char c int i j for i j 0 stri 0 i if stri c strj stri strj 0流程图 完整代码(删除字符串)includeincludemain int i j k n2 char string100 s20 printf输入字符串:n getsstring printf输入要删除的子串:n getss 完整代码(删除字符串)k 0 n2 strlens for i 0stringi i //删除字符串 for k 0 j i sk stringj sk stringj kj //当出现字符串与要删除的字符串相同时进入循环 if k n2 //当完全相同的时候进入以下循环 完整代码(删除字符串) for k i stringj //若字符串结束则,结束循环 stringk stringj //将第i个字符替换为第in2的 字符,即被删除的字符后的 字符 stringk 0 //将下一个字符替换为空,以防止意外 i 0 //又从头开始循环,直到没有该字符串 else i j //如果不是完全相同,则继续计数 完整代码(删除字符串)putsstring getchar运行结果 提到删除,我们很容易想到链表。
对于 链表结点的删除,链表只需改变成员指针 的指向。
操作比数组方便的多,但是为什 么不用链表呢?因为:如果使用链表,那么,每储存一个字符至少需要一个字节来储存字符和四个字节的空间来储存指针。
这样虽然操作简单,但就太浪费空间了! 对于数组的弊端:对于数组,每出现一次被删除字符,就意 味着,在它以后的所有数字都会被一次 移动一次。
而且,当所有将被删除的字 符都位于字符串末尾时,移动次数最少。
全都位于前端时次数最多。
如果假设总字符数为m,被删字符数为n,次 数为t。
容易算出: 次数最少时:tn 最多是:tm-n可以看出当n增大的时候,t迅速增大。
而如果用链表,tn。
将会远远小于用数组时 的移动次数。
但是在我们真正使用删除字符的时候,不 可能输入太多的字符,所以采用数组方 式。
没有无用的数据结构,只有不适合的结构。
谢谢
上一篇:
安装PHP和Oracle 10g即时客户端
下一篇:
2012邮政局信息公开总结