【C編程練習】華爲2013校園招聘機試題3:對源字符串中得字符串進行查找替換並返回動態申請空間的指針char* Fun(char*pSrc,char*pOldStr, char*pNewStr)

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

}

 

運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章