挑战面试编程:字符串替换
写一个字符串替换函数,如母串"123123123123",把母串中的子串"123",替换为"12345",或者"12"。
思路:
利用库函数strstr(),定位子串。使用strcpy()进行替换。不断重复着定位和替换操作,直到定位到NULL为止。
操作示意图:
开始新一轮的定位……
示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
字符串替换
把字符串str中的子串s1,替换成s2
*/
char *strReplace(char *str, char *s1, char *s2)
{
//在堆中申请一片空间
char *s = malloc(50);
//清空
memset(s, 0, 50);
//把str拷贝到s中
strcpy(s, str);
char buf[50];
char *pStr = strstr(s, s1);
while (pStr)
{
//保存后续内容
strcpy(buf, pStr+strlen(s1));
//s2替换s1
strcpy(pStr, s2);
//移动pStr
pStr += strlen(s2);
//把后序内容补上
strcpy(pStr, buf);
//寻找下一次替换的位置
pStr = strstr(pStr, s1);
}
str = s;
return str;
}
void main()
{
//"123"->"12345"
char *str = "123123123123";
printf("原字符串\n");
printf("%s\n", str);
str = strReplace(str, "123", "12345");
printf("替换后\n");
printf("%s\n", str);
free(str);
system("pause");
}
运行
补充:
对strcpy()的模拟
char *i_strcpy(char *dest, char *src)
{
if (src == NULL)
return dest;
if (dest == NULL)
return NULL;
char *p = dest;
while (*dest++ = *src++);
dest = p;
return dest;
}
所有内容的目录