用C语言实现字符串替换功能

下面是用C语言实现字符串替换功能的代码:

char  *replace(char  *source,  char  *sub,  char  *rep)
{
 char  *result;
 /*pc1  是复制到结果result的扫描指针*/
 /*pc2  是扫描 source 的辅助指针*/
 /*pc3  寻找子串时,为检查变化中的source是否与子串相等,是指向sub的扫描指针 */
 /*找到匹配后,为了复制到结果串,是指向rep的扫描指针*/
 char  *pc1,  *pc2,  *pc3;
 int  isource,  isub,  irep;
 isub  = strlen(sub);   /*对比字符串的长度*/
 irep  = strlen(rep);   /*替换字符串的长度*/
 isource= strlen(source); /*源字符串的长度*/ 
 if(NULL == *sub)
  return strdup(source);
 /*申请结果串需要的空间*/
 result  = (char *)malloc(( (irep > isub) ? (float)strlen(source) / isub* irep+ 1:isource ) * sizeof(char));
 pc1  =  result; /*为pc1依次复制结果串的每个字节作准备*/
 while(*source  !=  NULL)
 {
  /*为检查source与sub是否相等作准备,为pc2,pc3 赋初值*/
   pc2  =  source;
   pc3  =  sub;
  /* 出循环的(任一)条件是: 
      *  *pc2 不等于 *pc3 (与子串不相等)
      *  pc2  到源串结尾
      *  pc3  到源串结尾 (此时,检查了全部子串,source处与sub相等)
      *****************************************************/
   while(*pc2  ==  *pc3  &&  *pc3  !=  NULL  &&  *pc2  !=  NULL)
     pc2++,  pc3++; [Page]
  /* 如果找到了子串,进行以下处理工作*/
   if(NULL  ==  *pc3)
   {
     pc3  =  rep;
  /*将替代串追加到结果串*/
     while(*pc3  !=  NULL)
       *pc1++  =  *pc3++;
     pc2--;
     source  =  pc2;
  /*   检查 source与sub相等的循环结束后,
        * pc2 对应的位置是在 sub 中串结束符处。该是源串中下一个位置。
        * 将 source 指向其前面一个字符。 
        ***************************************************/
   }
   else /*如果没找到子串,下面复制source所指的字节到结果串*/ 
     *pc1++ = *source;
   source++; /* 将source向后移一个字符*/ 
 }
 *pc1  =  NULL;
 return  result;
}

以下为测试代码:

int main()
{
    char s1[] ="abbccdfdcdbbdcd";
   char s2[]="dcd";
   char s3[]="12345";
   char *p = replace(s1,s2,s3);
   printf("source=%s\n",s1);
  puts(s1);
  printf("sub = %s\n",s2);
  puts(s2);
  printf("replace string = %s",p);
return 0;
}

时间: 2024-09-17 04:06:20

用C语言实现字符串替换功能的相关文章

C语言之字符串模糊查询方法的实现_C 语言

字符串模糊查询,主要是输入不完全的信息进行查找,即每次查找的是待查询的内容中是否含有输入的内容,如果有,则表示找到了.下面详细的介绍下模糊查询的实现方法,代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, const char * argv[]) { char str[] = "hello welcome to china\0"; //

基于C++字符串替换函数的使用详解_C 语言

在C++中,字符串替换有很多方法,这里主要说一下STL里的WString中的替换,虽然WString自带了一个Replace函数,但是只能替换一次,太不好了,因此单独写了个替换函数[函数] 复制代码 代码如下: /**         * @brief   实现字符串替换         * @param   orignStr 源串         * @param   oldStr  查找的串         * @param   newStr  替换的新串         * @return

输出-字符串替换。。。。。

问题描述 字符串替换..... 写出一个程序,接受三个参数,分别是一个字符串和两个字符,然后输出替换字符后的字符串.区分大小写,用C语言 解决方案 #include#includeint main(){ int i=0; char ab; char str[80]={''}; printf(""Enter a stringn""); gets(str); printf(""Enter a character to be replaced and

php字符串替换函数str

php里字符串替换的函数,有str_replace().str_ireplace().substr_replace().preg_replace().strtr()等几个,程序员在写程序的时候,往往会根据自己的习惯以及实际情况选用其中一个或多个.这几个函数虽然都有字符串替换的功能,但它们无论从语法到作用,还是速度和效率上都有所不同,所以并非在任何场合都可以使用它们. str_replace()与preg_replace()的区别 在字符串替换的函数里,str_replace()的使用率是最高的,

php字符串替换

1.str_ireplace()函数 使用新的字符串替换原始字符串中被指定要替换的字符串.str_ireplace()函数在操作时,不区分大小写. 语法格式: str_ireplace(str2,str1,str) 说明:把原始字符串str中的子字符串str2用str替换掉 例: <?php $str="www.bianceng.cn"; $str2="cn"; $str1="com";echo str_ireplace($str2,$st

C语言中字符串常用函数strcat与strcpy的用法介绍

以下是对C语言中字符串常用函数strcat与strcpy的使用方法进行了详细的分析介绍,需要的朋友可以参考下   strcpy原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include <string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串. 返回指向dest的指针.函数实现: 复制代

word强大的搜索替换功能

会程序的朋友都知道正则表达式的强大灵活,其实这功能word也有,只是很少有人用到.比如替换两个换行符为一个.替换所有以abc开头的单词.同时查找多个关键词等等比较复杂的场景,使用word查找替换功能中的通配符是再好不过的选择了. Word通配符用法详解 一.任意单个字符: "?"可以代表任意单个字符,输入几个"?"就代表几个未知字符.如: 输入"? 国"就可以找到诸如"中国"."美国"."英国&q

ASP replace()字符串替换介绍

Replace 函数 返回字符串,其中指定数目的某子字符串被替换为另一个子字符串. Replace(expression, find, replacewith[, compare[, count[, start]]]) 参数 expression 必选项.字符串表达式 包含要替代的子字符串. Find 必选项.被搜索的子字符串. Replacewith 必选项.用于替换的子字符串. Start 可选项.expression 中开始搜索子字符串的位置.如果省略,默认值为 1.在和count 关联时

求C#做的记事本中替换功能如何实现,网上找的代码都有bug,具体和windows记事本类似

问题描述 求C#做的记事本中替换功能如何实现,网上找的代码都有bug,具体和windows记事本类似 不一定要和windows记事本一模一样,只要没有bug 实现 替换就行 解决方案 reichtextbox.text.replace(oldstring,newsring)就可以了. 解决方案二: 查找会写吧.替换就是查找以后 textBox1..Selection = 你的替换文本 解决方案三: C#字符串替换函数就是replace,就算源代码有错,改改就行