删除子串(字符串、循环)

版权声明:本文为博主原创,未经博主允许不得转载 https://blog.csdn.net/Sherry_Yue/article/details/85639085

【问题描述】
编写一个程序,当在一个字符串中出现子串时就删除它。

【输入形式】
用户在第一行输入一个字符串,用户在第二行输入一个子串。注意:第二行输入结束时可能用回车,也可能不用回车。

【输出形式】
程序在下一行输出删除其中所有子串后的字符串。如果字符串不包含子串则输出原字符串本身。

【样例输入】
I am a boy!
a

【样例输出】
I m boy!

【样例说明】
用户首先输入字符串I am a boy!,然后输出子串a,程序会寻找字符串中的子串删除它,最后 将删除后的结果输出:I#m##boy! #表示空格。请注意子串长度不一定为1。

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    char str[100], Substr[50];
    cin.get(str,100);//因为字符串里可能包含空格,所以用cin.get()输入
    cin.get();//用cin.get()需要吞掉回车
    cin.get(Substr,50);//输入子串
    int len1 = strlen(str);//字符串长度
    int len2 = strlen(Substr);//子串长度
    for(int i=0;i<len1;++i)//查找字符串中每一个字符
    {
        int key = 1;
        if(str[i]==Substr[0])//如果第i个字符等于子串中的第一个字符
        {
             for(int j=i+1,k=1;k<len2;++j,++k)//开始比较第i个字符后len2长度的每个字符是否跟子串的每个字符相等
                if(str[j]!=Substr[k])
                    key = 0;//如果不等就标记key=0
            if(key==1)//如果每一个都相等,就开始删除字符串中和子串相同的内容
            {
                int index = i;
                while(index<len1-len2)//当index+len2<len1时就循环,不然取的str[index+len2]没有意义
                {
                    str[index] = str[index+len2];//每个字符一一覆盖
                    index++;
                }
                str[index] = '\0';//别忘记最后一个放结束符,否则原字符串的最后一个字符会循环输出直到原长度
            }
        }
    }
    cout << str << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Sherry_Yue/article/details/85639085