您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Delphi >> 正文

Google
打造Delphi中字符串的replace函数
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 15:51:36

打造Delphi中字符串的replace函数

编者注:其实Delphi的StringReplace函数就是专为满足这个需要而设的。但我们也将这篇文章发表出来——至少作者提供了一种替代方案,探索精神应该鼓励!

 

   这是小弟在这里的第一篇文章,加之自己水平也不是很高,就来讨论一个基础但是很实用的问题吧,希望能给大家一些帮助。

   用过vb的或asp的朋友都知道,在vb里有一个很实用的replace函数,它的功能是把一个字符串中与子串(又叫模式串)相匹配的串替换为指定的串。举个例子来说有这样一个字符串:s:=’apple is apple!’ ,用replace函数replace(s,’apple’,’box’)后,s就变为’box is box!’。串的长度也相应改变了。这是一个很有用的函数,大家都知道在开发数据库系统时会经常用到结构化查询语句sql,而这个语句中对有些字符是比较敏感的,比如说单引号,如果在sql语句中出现单引号(因为单引号是在sql中规定的一个有意义的字符)程序就会出现意想不到的错误,甚至可以被他人利用使系统产生严重安全漏洞(这就是著名的sql注入式攻击,相信大家还记得以前csdn论坛曾发现的这个漏洞吧)。这时你就需要在数据库操作时候将单引号替换为其他的字符串或空串,在读出数据的时候再替换回来,这样数据记录中就可以记录单引号,而不发生错误了。

   然而,我在delphi中却没有发现类似的函数(或许是我没找到?),实在是很不方便,于是自己写了一个,在以后的数据库系统开发中就方便多了。说了那么多废话,下面是代码,加上注释应该比较容易理解。

 

procedure replace(var s:string;const SourceChar:pchar;const RChar:pchar);

//第一个参数是原串,第二个是模式串,第三个是替换串

var

 ta,i,j:integer;

 m,n,pn,sn:integer;

 SLen,SCLen,RCLen:integer;//SLen表示原串的长度,SCLen表示模式传的长度,RCLen表示替换串的长度

 IsSame:integer;

 newp:array of char;//用来保存替换后的字符数组

begin

 SLen:=strlen(pchar(s));SCLen:=strlen(SourceChar);RCLen:=strlen(RChar);

 j:=pos(string(SourceChar),s);

 s:=s+chr(0);ta:=0;i:=j;

 while s[i]<>chr(0) do   //这个循环用ta统计模式串在原串中出现的次数

 begin

   n:=0;IsSame:=1;

   for m:=i to i+SCLen-1 do

   begin

    if m>SLen then begin IsSame:=0;break; end;

    if s[m]<>sourceChar[n] then begin IsSame:=0;break; end;

    n:=n+1;

   end;

[1] [2] [3] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
GOOGLE广告

阅读排行

| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号