首页 > 试题广场 >

删除公共字符

[编程题]删除公共字符
  • 热度指数:731 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
例如:第一个字符串是"They are students.",第二个字符串是”aeiou"。删除之后的第一个字符串变成"Thy r stdnts."。
保证两个字符串的长度均不超过100。

输入描述:
输入两行,每行一个字符串。


输出描述:
输出删除后的字符串。
示例1

输入

They are students. 
aeiou

输出

Thy r stdnts.
#include <iostream>
#include<string>
using namespace std;

int main() {
    string a, b;
    while (getline(cin, a) && getline(cin, b)) { // 注意 while 处理多个 case
        string::iterator it = a.begin();
        while (it != a.end())
        {
            size_t pos = a.find_first_of(b);
            if (pos != string::npos)
            {
                it = a.erase(a.begin()+pos);
            }
            else
            {
                break;
            }

        }
        cout << a;
    }
    return 0;
}

编辑于 2024-01-22 14:07:56 回复(0)
#include <stdio.h>
#include <string.h>
char* delete_char(char *str1,char *str2)   //在str1中删除str2中出现的字符
{
	int flag=1;
	char str3[101] = {0};
	char* s3 = str3;
	char* s2 = str2;
	while (*str1)
	{
		flag = 1;
		s2 = str2;
		while (*s2)
		{
			if (*str1==*s2)
			{
				flag = 0;
				break;
			}
			s2++;
		}
		if (flag == 1)
		{
			*s3 = *str1;
			s3++;
		}
		str1++;
	}
	return strcpy(str1,str3);
}

int main()
{
	char str1[101] = "";
	char str2[101] = "";
    gets(str1);
    gets(str2);
	char *str=delete_char(str1,str2);
	printf("%s",str);
	return 0;
}



发表于 2023-10-23 18:11:18 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
         String a=in.nextLine();
         String b=in.nextLine();
         System.out.println(removeString(a,b)) ;
        }
        }
    public static String removeString(String str1,String str2){
        for(char c:str2.toCharArray()){
           str1= str1.replace(String.valueOf(c),"");
        }
        return str1;

    }    
}
发表于 2023-08-24 10:49:37 回复(1)
import java.util.Scanner;
import java.util.HashSet;
import java.util.Set;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String a = in.nextLine();
            String b = in.nextLine();
            String c=delete(a,b);
            System.out.println(c);
        }
    }
    public static String delete(String str1,String str2){
        Set<Character> set = new HashSet<>();
        for(int i=0;i<str2.length();i++){
            set.add(str2.charAt(i));
        }
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<str1.length();i++){
            char ch = str1.charAt(i);
            if (!set.contains(ch)) {
                sb.append(ch);
            }
        }
        return sb.toString();
    }
}
发表于 2023-04-21 14:48:06 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    char s1[100] = {0};
    gets(s1);


    char s2[100] = { 0 };
    scanf("%s",s2);

        int sz = strlen(s1);
        char* p1 = s1;
        char* p2 = s2;
        while (*p2 != '\0')
        {
            for (int i = 0; i < sz; i++)
            {
                if (*(p1 + i) == *p2)
                {
                    for (int j = i; j < sz - 1; j++)
                    {
                        *(p1 + j) = *(p1 + j + 1);
                    }
                    sz--;
                }
            }
            p2++;
            p1 = s1;
        }
        for (int i = 0; i < sz; i++)
        {
            printf("%c", s1[i]);
        }
    
    return 0;
}

发表于 2023-04-05 16:47:45 回复(0)

要注意的是 string 字符串调用 erase() 函数后迭代器会失效,要将迭代器指针前移一个位置,即执行 --it; 操作。

#include <iostream>
#include <string>
#include <unordered_map>
#include <algorithm>
using namespace std;

int main()
{
    string str1, str2;
    getline(cin, str1);
    getline(cin, str2);
    unordered_map<char, bool> mp;
    for (char c : str2) mp[c] = true;
    for (auto it = str1.begin(); it != str1.end(); ++it)
        if (mp[*it])
        {
            str1.erase(it);
            --it;
        }
    cout << str1 << endl;
    return 0;
}
发表于 2022-08-09 15:46:29 回复(0)
000
发表于 2022-08-08 22:50:34 回复(0)