关于串替换,帮忙给个思路吧
将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);//用来替换的字符串 }