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


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

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

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

    【样例输入】
    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;//第一个开关
            int key2 = 0;//第二个开关
            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] = '';//别忘记最后一个放结束符,否则原字符串的最后一个字符会循环输出直到原长度
                    key2 = 1;//如果进行了删除相同字符串操作,key2=1;
                }
            }
            if(key2==0) i++;//如果没有删除字符串那么i就加一,指向下一个字符继续比较
            //如果key2==1,那么就不要i++,因为删除字符串完了之后下标i就是指向下一个字符;如果依旧++i,那么当母串是aaaaa,子串是a时就会出问题
        }
        cout << str << endl;
        return 0;
    }
    
  • 相关阅读:
    wpf之依赖属性
    wpf之布局控件
    WPF之绑定
    wpf之触发器
    wpf之样式
    wpf之TreeView
    wpf(五)
    【Javaweb】poi实现通过上传excel表格批量导入数据到数据库
    Java读取批量Excel文件
    Centos上通过yum命令删除有关MySQL
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626135.html
Copyright © 2020-2023  润新知