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

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

#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;
}

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

时间: 07-11

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

一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数

当然如果这个问题是只有一个不同的数,其他数字成对相同,那么就是把所有数字异或就得出这个数了 这次是有两个只出现一次的数字,其他数字都成对相同 1)先把所有数都异或得到数t 2)算出t的二进制第一个1的位置flag 3)将所有数根据二进制flag位置是否为1分成两组b1[],b2[] (此时每组数字的个数一定是奇数) 4)将b1组异或得到ans1,将b2组异或得到ans2 #include<iostream> #include<stdio.h> using namespace std

hdu2896 病毒侵袭 AC自动机入门题 N(N &lt;= 500)个长度不大于200的模式串(保证所有的模式串都不相同), M(M &lt;= 1000)个长度不大于10000的待匹配串,问待匹配串中有哪几个模式串,

/** 题目:hdu2896 病毒侵袭 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 题意:N(N <= 500)个长度不大于200的模式串(保证所有的模式串都不相同), M(M <= 1000)个长度不大于10000的待匹配串,问待匹配串中有哪几个模式串, 题目保证每个待匹配串中最多有三个模式串. 思路:ac自动机做法,字符为可见字符,那么直接就是他们的ascii值作为每一个字符的标志.最多128: 由于不超过三个,所以找到3个就可以re

1.2原串翻转

题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniString,请返回一个string,为翻转后的字符串.保证字符串的长度小于等于5000. 测试样例 "This is nowcoder" 返回:"redocwon si sihT" 解法 //注意不分配额外空间 //①C++ //1.2原串翻转 1 class Reverse { 2 public: 3 string rev

(KMP 1.3)hdu 2087 剪花布条(求文本串中有几个模式串)

题目: 剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10380    Accepted Submission(s): 6684 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输

HDU 3518 Boring counting(后缀数组啊 求字符串中不重叠的重复出现至少两次的子串的个数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3518 Problem Description 035 now faced a tough problem,his english teacher gives him a string,which consists with n lower case letter,he must figure out how many substrings appear at least twice,moreover

linux/shell 文本文件删除/删掉空行

分别用sed awk perl grep 实现: 1 sed '/^$/d' input.txt > output.txt #output file: output.txt 2 sed -i '/^$/d' input.txt #output file: input.txt 3 awk 'NF > 0' input.txt > output.txt #output file: output.txt 4 perl -i.backup -n -e "print if /\S/&qu

微信通讯录不见了?或者只显示部分?删掉它就解决了!

微信的通讯录显示不全,只有部分或者都不见了,这种情况,一般是一个电脑有几个微信版本造成的! 今天下午,有个同事居然还用着1.5版本的微信,而现在最新的已经是2.6版本的了,也是服了,还出现微信的图片发不出去,按回车,图片就不见了,这个问题,升级到最新版微信就可以了,但是通讯录问题,却是不能解决,我研究了下,删掉以下文件夹,问题就可以完美解决了! 删掉文件夹路径为"C:\User\Administrator\Documents\WeChat Files\",目录下以你的微信号命名的文件夹

母串中有几个相同的子串

1 #include <stdio.h> 2 int getSubstrCount(char* str,char* subStr) 3 { 4 int count = 0; 5 while(*str) 6 { 7 int i; 8 //如果在大串中碰到相同的字符,则进入循环开始连续判断,如果出现不相同的则终止循环.如果完全相同则小串正常结束 9 for(i = 0;*(str+i) == *(subStr+i)&& *(subStr+i) != '\0';i++); 10 if

C#查找子串在原串中出现次数

提供的是一种思路,和具体语言无关. string test = "good good study day day up"; string r = test.Replace("oo",""); int num = (test.Length - r.Length) /"oo".length; Console.WriteLine(num);