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

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

#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;
}
posted @ 2014-07-10 10:27  Andy Cheung  阅读(1289)  评论(0编辑  收藏  举报