点击这里给我发消息 点击这里给我发消息

常见C语言面试题之三:字符串替代

添加时间:2013-12-7
    相关阅读: C语言

 #include "string.h"
#include "malloc.h"

char *replace(char *source, char *sub, char *rep)
{
  char *result;

  //*pc1是复制到结果result的扫描指针
  //*pc2是扫描source 的辅助指针
  //*pc3寻找子串时,为检查变化中的source是否与子串相等,是指向sub的扫描指针
  //找到匹配后,为了复制到结果串,是指向rep的扫描指针
  char *pc1,*pc2,*pc3;

  int isource, isub, irep;
  isource = (int)strlen(source);
  isub = (int)strlen(sub);
  irep = (int)strlen(rep);

  if(*sub==NULL)
    return strdup(source);

  //申请结果串需要的空间
  int size = (int)( (irep>isub)?(float)strlen(source)/isub*irep+1 : isource );
  result = (char *)malloc(size*sizeof(char));
  pc1=result;//为pc1依次复制结果串的每个字节作准备

  while(*source !=NULL)
  {
    //为检查source与sub是否相等作准备,为pc2,pc3 赋初值
    pc2=source;
    pc3=sub;

    //出循环的(任一)条件是:
    //*pc2不等于*pc3(与子串不相等)
    //*pc2到源串结尾
    //*pc3到源串结尾(此时,检查了全部子串,source处与sub相等)
    while(*pc2==*pc3 && *pc3!=NULL && *pc2!=NULL)
    {
      pc2++;pc3++;
    }

    //如果找到了子串,进行以下处理工作
    if(*pc3==NULL)
    {
      pc3=rep;
      //将替代串追加到结果串
      while(*pc3!=NULL)
      {
        *pc1++ = *pc3++;
      }
      pc2--;
      source=pc2;

      //检查source与sub相等的循环结束后
      //* pc2 对应的位置是在sub 中串结束符处。该是源串中下一个位置。
      //将 source 指向其前面一个字符。
    }
    else   //如果没找到子串,下面复制source所指的字节到结果串
    {
      *pc1++ = *source;
    }
    source++; //将source向后移一个字符
  }
  *pc1=NULL;
  return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
char Source[] = "abbccdfdcdbbdccd";
  char Sub[] = "bb";
  char Rep[] = "*****";
  char *p = replace(Source, Sub, Rep);
  printf("Source:%s\n",Source);
  printf("Sub:%s\n",Sub);
  printf("Rep:%s\n",Rep);
  printf("Result:%s\n",p);
  return 0;
}

相关常见C语言面试题之三:字符串替代

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册