基础编程题目集 7-29 删除字符串中的子串 (20分)

在这里插入图片描述

c:

#include <stdio.h>
#include <string.h>
int main()
{
    char s1[100];
    gets(s1);
    char s2[100];
    gets(s2);
    int len1, len2; //字符串长度
    len1 = strlen(s1);
    len2 = strlen(s2);
    int i, j, k;  //循环变量
    int flag = 1; //控制while循环
    int f;        //判断是否删除
    while (flag)
        for (i = 0; i < len1; i++)
        {
            flag = 0;           //默认s1中不存在符合要求的子串,若遍历完后flag仍为0则程序结束
            if (s1[i] == s2[0]) //寻找与子串第一个字母相同的字符
            {
                f = 1;                                 //默认从第i个字符开始的子串符合要求
                for (j = i, k = 0; k < len2; j++, k++) //检验是否符合要求
                    if (s1[j] != s2[k])                //若不符合要求,则f=0,退出for循环的检验
                    {
                        f = 0;
                        break;
                    }
                if (f) //若f不为0,则进行删除操作
                {
                    flag = 1;                  //即存在符合要求的子串,将flag=1以便再次检查
                    for (; j < len1; j++, i++) //将后面的字符逐一替换到前面
                        s1[i] = s1[j];
                    for (; i < len1; i++) //对后续多余的字符串进行清空
                        s1[i] = '\0';
                    break; //重新开始for循环,从第一位开始寻找
                }
            }
            len1 = strlen(s1); //重新计算s1的长度,此步影响的用时很小,可有可无
        }
    puts(s1);
    return 0;
}

c++:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a, b;
    getline(cin, a);
    getline(cin, b);
    while (a.find(b) != string::npos)
    {
        a.erase(a.find(b), b.length());
    }
    cout << a;
    return 0;
}

java:

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        while(s1.contains(s2)){
            s1 = s1.replace(s2,""); //只需要调用replace函数  用空字符串代替s2的字符串 直至s1字符串中没有s2
        }
        System.out.print(s1);
    }
}
发布了287 篇原创文章 · 获赞 117 · 访问量 8920

猜你喜欢

转载自blog.csdn.net/qq_44458489/article/details/105400470