|
|
发表于 2013-9-17 07:43:52
|
显示全部楼层
我也来贴下自己的代码,代码写的有点乱,高手飘过。
这个题主要就是方法(可以说是算法)和思路,代码挺简单的,我就不做过多的注释了。有不明白的就问我把:lol:
本人也是小菜鸟,希望大牛能把自己好的思路和代码发上来,一起分享和讨论!
奉上自己凌乱的代码:
- #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;
- }
复制代码
|
|