//ex1_f1.cpp
// 源作者:曹玲玲 编于2012-09-12
//【题目】华为2013校园招聘机试题目9月10日题3
//【功能】 对源字符串中得字符串进行查找替换 并返回动态申请空间的指针 char* Fun(char* pSrc, char* pOldStr, char* pNewStr);
// 【输入】pSrc 源字符串
// pOldStr 需要被替换的字符串
// pNewStr 替换的新的字符串
// 【返回】替换后的新的字符串的指针
#include <stdio.h>
#include <stdlib.h>
char* Fun(char* pSrc, char* pOldStr, char* pNewStr)
{
int i=0,j=0,z=0;
int poisition=1;
unsigned Len_OldStr=0,Len_Src=0,Len_NewStr=0;//字符串pOldStr的长度
char *ReStr;
//字符串pSrc的长度
while(pSrc[i]!='\0')
{
Len_Src++;
i++;
}
//字符串pOldStr的长度
while(pOldStr[j]!='\0')
{
Len_OldStr++;
j++;
}
//字符串pOldStr的长度
while(pNewStr[z]!='\0')
{
Len_NewStr++;
z++;
}
i=0;j=0;z=0;
ReStr=(char *)malloc(Len_Src-Len_OldStr+Len_NewStr+1);
//查询字符串pOldStr在源字符串中的位置pSrc
while (pSrc[i]!='\0'&&pOldStr[j]!='\0')
{
if(pSrc[i]==pOldStr[j])//判断字符是否相等
{
i++;
j++;
}
else if (pSrc[i]==pOldStr[0])//不相等时:情况1:当前源字符与子串pOldStr[0]相同
{
poisition=i+1;//子串所在的位置是当前位置[i]
i++;
j=1;//下次从子串的第二个位置开始比较
}
else
{
poisition=i+2;//子串所在的位置是下一个位置[i+1]
i++;
j=0;//下次依然从子串的第一个位置开始比较
}
}
if (pOldStr[j]=='\0')
poisition=poisition;
else
{
poisition=0;//未查找到子串
return NULL;
}
//替换字符串并复制到新的字符串内
i=0;
j=0;
while(pSrc[i]!='\0')
{
if (i==poisition-1)
{
z=0;
while (pNewStr[z]!='\0')
{
ReStr[j]=pNewStr[z];
j++;
z++;
}
i=i+Len_OldStr;
}
else
{
ReStr[j]=pSrc[i];
j++;
i++;
}
}
ReStr[j]='\0';
return ReStr;
}
//主函数
void Fun_Main()
{
char* pSrc="caolingling";
char* pOldStr="ling";
char* pNewStr="mei";
char *Re;
Re=Fun(pSrc, pOldStr, pNewStr);
printf("源 字 符 串:%s\n需要替换的字符串:%s\n替 换 为:%s\n",pSrc, pOldStr, pNewStr);
printf("替换后为:%s",Re);
free(Re);
}
运行结果