首页 > 代码库 > 删除子串,只要是原串中有相同的子串就删掉所有子串。子串至少两个字符。

删除子串,只要是原串中有相同的子串就删掉所有子串。子串至少两个字符。

//删除子串,只要是原串中有相同的子串就删掉所有子串。子串至少两个字符。#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;}