//删除子串,只要是原串中有相同的子串就删掉所有子串。子串至少两个字符。
#include<stdio.h>
#include<string.h>
char* delete_string(char s[],char a[]);
int main()
{
char s[255];
char data[255][255];//存放相同的子串
int i,j,k;
int length;
int row = 0,column;//data[][]的行标和列标
gets(s);
length = strlen(s);
//寻找相同的子串
for(i=0;i<length-3;i++)
{
for(j=i+1;j<length-1;)
{
if((s[i] == s[j]) && (s[i+1] == s[j+1]))
{
column = 0;
k = 0;
do
{
data[row][column++] = s[j];
j++;k++;
}while(s[i+k] == s[j]);
data[row++][column] = '\0';
}
else
{
j++;
}
}
}
puts("The same string:");
for(i=0;i<row;i++)
{
puts(data[i]);//输出相同的子串
}
for(i=0;i<row;i++)
{
delete_string(s,data[i]);
}
puts("After deleted:");
puts(s);
return 0;
}
//函数功能:如果字符串s中包含子串a,则将s中的a删除。否则不做任何改变。
char* delete_string(char s[],char a[])
{
int length_s;
int length_a;
int i,j,k;
length_s = strlen(s);
length_a = strlen(a);
for(i=0;i<length_s;)
{
j = 0;
if(s[i] == a[j])
{
do
{
i++;j++;
}while((j < length_a) && (s[i] == a[j]));
if(j == length_a)
{
//表明s中包含子串a,将其删除。
for(k=i;k<=length_s;k++)
{
s[k-length_a] = s[k];
}
i = i - length_a;
j = 0;
}
else
{
j = 0;
}
}
else
{
i++;
}
}
return s;
}