#include <stdio.h>
#include <string.h>
#define MAXSIZE 50
typedef struct{
char data[MAXSIZE];
int len;
}SString;
int strlen(SString r){/*求串长*/
int i=0;
while(r.data[i]!='\0'){
i++;
}
return i;
}
void print(SString r){/*输出串*/
int i;
for(i=0;i<r.len;i++){
printf("%c",r.data[i]);
}
printf("\n");
}
/*
**删除r中所有与r1相同的字串
*/
void DeleteR1(SString &r,SString r1){
int i=0,j,k;
if(r.len<r1.len)/*判断主串长度是否大于子串长度*/
{
printf("匹配失败...\n");
return;
}
j=i;k=0;/*主串和子串都从头开始比较*/
while(j<r.len&&k<r1.len){
if(r.data[j]==r1.data[k]){ /*主串中找到与子串相同的串*/
j++;
k++;
}else{/*未找到,主串下标加1,子串下标回退到0*/
i++;
j=i;
k=0;
}
if(k>=r1.len){/*删除找到的子串*/
int n;
for(n=i;n<r.len;n++){
r.data[n]=r.data[n+r1.len];
}
r.len-=r1.len;/*主串长度减去子串长度*/
i=0;/*删除完子串后主串中还有相同子串,再次从头开始比较*/
j=i;
k=0;
}
}
}
int main(){
SString x,y;
strcpy(x.data,"abcdaaaababaa");
strcpy(y.data,"aa");
x.len=strlen(x);
y.len=strlen(y);
printf("删除前:");
print(x);
DeleteR1(x,y);
printf("删除后:");
print(x);
return (0);
}
运行结果: