实现函数:int strreplace(char *origin,char *target,char *rpl); 在origin字符串中寻找target字符串,并用rpl来替换。
#include <stdio.h>#include <string.h>
int main()
{
int strreplace(char *origin,char *target,char *rpl);
char o[1024], t[1024], r[1024];
int count; //计算替代的个数
printf("请输入源字符串:\n");
scanf("%s", o);
printf("请输入被替换的字符串:");
scanf("%s", t);
printf("请输入需要替换字符串:");
scanf("%s", r);
count = strreplace(o, t, r);
printf("新的字符串为:\n");
printf("%s\n", o);
printf("共有:%d处被替换了!\n", count);
return 0;
}
int strreplace(char *origin,char *target,char *rpl)
{
int count, i, j, k, len_origin,len_target, len_rpl, local; // local定位temp中的位置
char temp[1024];
len_origin = strlen(origin);
len_target = strlen(target);
len_rpl = strlen(rpl);
count = 0;
local = 0;
if(len_origin < len_target)
{
printf("被替换的字符串长度大于原字符串,不能替换!!\n");
return 0;
}
i = 0;
while(origin[i])
// 如果最后一个字符相同于target,数组引用是有可能超界,但测试没出错
{
for(j = 0; j < len_target; j++)
{
if(origin[i+j] != target[j])
break;
}
if(len_target != j) //判断
{
temp[local] = origin[i]; //不相同就复制到temp中
local++;
}
else
{
for(k = 0; k < len_rpl; k++)
{
temp[local] = rpl[k]; //将替换内容复制到temp中
local++;
}
count++;
i = i + j - 1; //i指向替换的最后一个对象
}
i++;
}
temp[local] = '\0'; // temp最后需要'\0'来结尾
for(i = 0; temp[i]; i++) // 将temp复制到origin上
{
origin[i] = temp[i];
}
origin[i] = '\0'; // origin也需要以'\0'结尾,origin后面如果有内容也被忽略
return count;
}