c语言 替换字符串中的子串,字符串中的子串替换

在很多编程语言中,都封装了字符串替换的操作,那么我们这里自己用C语言来实现一个字符串替换的函数。具体需求为:Replace(String S,String T,String V),用V替换主串S中出现的所有与T相等的不重叠的子串。

字符串替换这个操作,需要结合我们前面讲到的几个函数。

首先是Index,找到子串位置。

然后是StrDelete,将找到的子串删除。

再执行StrInsert,把新的子串插入。

OK,完成

如果对这三个函数不熟悉,可以翻看本专题的前面三篇文章。具体函数设计为:

/* 初始条件: 串S,T和V存在,T是非空串(此函数与串的存储结构无关) */

/* 操作结果: 用V替换主串S中出现的所有与T相等的不重叠的子串 */

Status Replace(String S,String T,String V)

{

int i=1; /* 从串S的第一个字符起查找串T */

if(StrEmpty(T)) /* T是空串 */

return ERROR;

do

{

i=Index(S,T,i); /* 结果i为从上一个i之后找到的子串T的位置 */

if(i) /* 串S中存在串T */

{

StrDelete(S,i,StrLength(T)); /* 删除该串T */

StrInsert(S,i,V); /* 在原串T的位置插入串V */

i+=StrLength(V); /* 在插入的串V后面继续查找串T */

}

}while(i);

return OK;

}

完整的可执行程序:

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define MAXSIZE 40 /* 存储空间初始分配量 */

typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */

typedef char String[MAXSIZE+1]; /* 0号单元存放串的长度 */

/* 输出字符串T */

void StrPrint(String T)

{

int i;

for(i=1;i<=T[0];i++)

printf("%c",T[i]);

printf("\n");

}

/* 若S为空串,则返回TRUE,否则返回FALSE */

Status StrEmpty(String S)

{

if(S[0]==0)

return TRUE;

else

return FALSE;

}

/* 生成一个其值等于chars的串T */

Status StrAssign(String T,char *chars)

{

int i;

你可能感兴趣的:(c语言,替换字符串中的子串)