//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);
}
運行結果