急fun函数的功能如何去实现字符串替换的啊求详解
急急急急,fun函数的功能怎么去实现字符串替换的啊?求详解。
#include <stdio.h>
#include <string.h>
void fun (char *s, char *t1, char *t2 , char *w)
{
char *p , *r, *a;
strcpy(w, s);
while (*w)
{p = w; r = t1;
/************found************/
while (*r)
if (*r == *p) {r++; p++;}
else break;
if (*r == '\0')
{a = w; r = t2;
while (*r){
/************found************/
*a = *r; a++; r++;
}
w += strlen(t2);
}
else w++;
}
}
main()
{
char s[100], t1[100], t2[100], w[100];
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if (strlen(t1)==strlen(t2)) {
fun(s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else printf("Error : strlen(t1) != strlen(t2)\n");
}
求解fun函数部分思路字符串替换思路?最后每句诠释。
------解决方案--------------------
while (*r)if (*r == *p) {r++; p++;}else break;//这个while是找w中第一个与t1匹配的字串
if (*r == '\0')//这个判断条件成立的话,说明找到字串
{a = w; r = t2;
while (*r){*a = *r; a++; r++;}//如果找到字串,用t2替换
w += strlen(t2);//w前进到找到字串的最后一个位置
else w++;//如果没有找到,前进一个字符
------解决方案--------------------
楼主你代码给你整理下吧:
#include <stdio.h>
#include <string.h>
void fun (char *s, char *t1, char *t2 , char *w)
{
char *p , *r, *a;
strcpy(w, s);
while (*w)
{p = w; r = t1;
/************found************/
while (*r)
if (*r == *p) {r++; p++;}
else break;
if (*r == '\0')
{a = w; r = t2;
while (*r){
/************found************/
*a = *r; a++; r++;
}
w += strlen(t2);
}
else w++;
}
}
main()
{
char s[100], t1[100], t2[100], w[100];
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if (strlen(t1)==strlen(t2)) {
fun(s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else printf("Error : strlen(t1) != strlen(t2)\n");
}
求解fun函数部分思路字符串替换思路?最后每句诠释。
------解决方案--------------------
while (*r)if (*r == *p) {r++; p++;}else break;//这个while是找w中第一个与t1匹配的字串
if (*r == '\0')//这个判断条件成立的话,说明找到字串
{a = w; r = t2;
while (*r){*a = *r; a++; r++;}//如果找到字串,用t2替换
w += strlen(t2);//w前进到找到字串的最后一个位置
else w++;//如果没有找到,前进一个字符
------解决方案--------------------
楼主你代码给你整理下吧:
- C/C++ code
void fun (char *s, char *t1, char *t2 , char *w) { char *p , *r, *a; strcpy(w, s); while (*w) { p = w; r = t1; while (*r) { if (*r == *p) { r++; p++; } else break; } if (*r == '\0') { a = w; r = t2; while (*r) { *a = *r; a++; r++; } w += strlen(t2); } else w++; } }
------解决方案--------------------
LZ,字符串替换一般是实用其他一些功能函数实现的,除非特殊情况,没必要手工实现
int index(string sub) // 定位子串
int strlen(string s) // 取字符串长
void strdel(string s,int begin,int end) // 删除指定区间字符
void strinsert(int pos,string s1,string s2) // 再某位置插入字符串
void fun(string s1,string s2,string s3)
{
int p = index(s2);
strdel(s1,p,p+strlen(s2));
strinsert(p,s1,s3);
}
------解决方案--------------------
当s所指字符产中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果:
就按照这个给你讲一下
首先char *s= "abcdabfab";char *t1= "ab";char *t2= "99";w是空的
1.刚进入函数,strcpy的作用是拷贝,令w = "abcdabfab";(注:这儿不是简单的相等因为w的首地址不等于s的首地址)
2.while外循环(作用:遍历所有w中的字符)
p = w; //令p="abcdabfab";且p的首地址等于w的首地址
r = t1;//令r="ab";且r的首地址等于t1的首地址
3.while内循环(作用:查找与t1相同的子串)
1)if此时r指向a,而p指向的也是a,所以*r=*p,然后r++;p++(r、p的地址++,指向下一个元素)此时*r=*p="b";成立,然后r++;p++,此时*r = NULL,所以while循环跳出
2)if循环,此时*r == '\0'成立,
------解决方案--------------------
- C/C++ code
void fun (char *s, char *t1, char *t2 , char *w) { char *p , *r, *a; strcpy(w, s); while (*w) { p = w; r = t1; while (*r)//开始遍历r中的每个字符 { if (*r == *p) //相等r和p指针各+1 { r++; p++; } else //不相等直接跳出循环 break; } if (*r == '\0')//如果是跳出循环这里必不成立,否则就是在p中找到了匹配的字符串 { a = w; //这里使用w是因为w指针未变动 r = t2; while (*r)//挨个赋值 { *a = *r; a++; r++; } w += strlen(t2);//赋值成功后w指针往后移动strlen(t2)个位置 } else //匹配循环由break跳出,所以指针w往后移动一位,继续重复上述动作(对于较长的字串用kmp算法较好一些) w++; } }