- #include "stdafx.h"
- #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语言面试题之三:字符串替代
最新推荐文章于 2025-05-17 16:11:09 发布