【C编程练习】华为2013校园招聘机试题3:对源字符串中得字符串进行查找替换并返回动态申请空间的指针char* Fun(char*pSrc,char*pOldStr, char*pNewStr)

来源:互联网 发布:珍妮曲奇授权的淘宝店 编辑:程序博客网 时间:2024/04/30 12:52

//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);

}

 

运行结果

原创粉丝点击