关于串替换,帮忙给个思路吧
将S串中的T替换为V,并输出替换后的串S=“ahebhechedhe”
T= “he”
V=“hello!”
#include"stdio.h"
#define MAXLEN 100
typedef struct
{
char vec[MAXLEN];
int len;
} Str;
高手们,能不能给个解题的思路,教教我这个菜鸟
程序代码:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
typedef struct
{
char vec[MAXLEN];
int len;
}Str;
void compre_string(char *ps, char *pt, Str &v);//比较字符串
void string_printf(char *p, char *q, Str &v);//输出字符串
int main(void)
{
Str s, t, v;
printf("请输入S字符串:");
scanf("%s", s.vec);
printf("请输入T字符串:");
scanf("%s", t.vec);
printf("请输入V字符串:");
scanf("%s", v.vec);
s.len = strlen( s.vec );
t.len = strlen( t.vec );
v.len = strlen( v.vec );
printf("替换后字符串:");
compre_string(s.vec , t.vec , v );
printf("\n");
return 0;
}
//找出ps字符串包含pt的起始地址和结束地址的后一个字符的地址
void compre_string(char *ps, char *pt ,Str &v)
{
char *ptemp, *ptemp1, *ptemp2;
ptemp = pt;//ptemp保存t字符串首地址
ptemp1 = NULL;
ptemp2 = ps;//ptemp2保存s字符串首地址
while(1)
{
pt = ptemp;//每次循环使t字符串首地址赋给pt
if(*ps == *pt)
{
ptemp1 = ps;//用ptemp1记录字符串s中每次与给定字符串t首字符相同的字符
while(1)
{
ps++;
pt++;
if((*ps != *pt) || (*ps == '\0'))//ps指向的字符与pt指向的字符不同或者到达s字符串尾部
{
if(*pt == '\0')//如果pt指向的字符到达t字符串的尾部(说明t字符串在s字符串中存在)
{
string_printf(ptemp2, ptemp1, v);
ptemp2 = ps;
}
break;//否则,只要s字符串中连续的与t字符串连续的字符中有一个不同,就跳出进行下一次比较
}
}
}
else
{
ps++;
if(*ps == '\0')//当到达s字符串尾部
{
printf("%s", ptemp2);//输出最后一部分字符
break;//跳出循环
}
}
}
}
//输出字符串中指定区间p和q之间的字符,并用字符串t.vec替换指定的字符串
void string_printf(char *p, char*q, Str &v)
{
while(p != q)//当字符地址不同时
{
printf("%c",*p);
p++;
}
printf("%s", t.vec);//用来替换的字符串
}
