信息产业培训网

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

http://www.miiceic.org.cn   2008-9-26 16:46:45   中程在线   浏览数:
关键字: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;

  }

来源:希赛网
相关连接
最新评论
*以下网友发言不代表中程在线网站的观点和看法
    我要评论

    请您注意
    1、遵守中华人民共和国的各项有关法律规定
    2、承担一切因您的行为而导致的法律责任
    3、本网留言管理人员有权删除其管辖留言内容
    4、您在本网的留言本网有权在网站内转载和引用
    5、参与本留言即表明您已经阅读并接受上述条款
    我爱研发网希赛网软件测试网中电华信太平洋电脑网天空网
    电脑爱好者泡泡网华军软件霏凡软件站软件开发网腾讯网
    eNet下载汉化新世纪小熊在线BIOS之家数动连线....[更多]
    关于我们 | 网站地图 | 周边住宿 | 行车路线 | 联系我们 | 网站律师 | 意见反馈 | 虚位以待 | 友情链接
    中程在线(北京)科技有限公司 版权所有
    总 部:北京市海淀区青东商务楼A座西四层
    企业培训部:010-52636110 52636106 就业培训部:010-68716925 68716926
    邮 件:training@miiceic.org.cn
    京ICP备06053134号
    Copyright © 2005-2008 Miiceic.org.cn All Rights Reserved