#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//程序由:HyperHorse整理,如有错误,请指出,谢谢
//编写一段函数,满足以下要求:将字符串s1中出现的所有s2替换为s3,并且不损坏字符串
//思路:1寻找子串的起始位置,2字符串移出足够空间,3替换字符串
//函数bug:若str长度较小,在进行多替换少时,可能内存溢出
char* replaceStr(char* str,char* strSub,char* strRep)
{
if(NULL == str || NULL == strSub || NULL == strRep)//判空
{
printf("您给定的字符串为空,麻烦您再检查一下呗!");
return NULL;
}
int iSubLen = strlen(strSub);
int iRepLen = strlen(strRep);
int iDiffLen = iSubLen - iRepLen;
int i = 0;
while('\0' != str[i])
{
int iBegin = i;//记录初始位置
int iEnd = i;//记录结束位置
int j = 0;
//寻找子串在原始字符串中的起始位置
while('\0' != strSub[j])
{
if(str[iEnd] == strSub[j])
{
iEnd++;
j++;
}
else
{
break;
}
}
//进行字符串的移位操作
if('\0' == strSub[j] )//表明找到了子串
{
if(iDiffLen >=0 )//表明子串的长度>=替换字符串的长度时,需要将原始字符串中从iEnd处向前移动iDiffLen长度
{
for(int k = iEnd ; k < strlen(str) ; k++)//从前
笔试题:04年_字符串替换
最新推荐文章于 2021-09-17 09:20:43 发布