首页 > 试题广场 >

删除公共字符

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

输入描述:
每个测试输入包含2个字符串


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

输入

They are students. 
aeiou

输出

Thy r stdnts.
//本题示例输入和实际输入不符。
//按照示例输入的话应该是两个字符串位于同一行。
//这样在处理输入的方法上有差别,这点需要注意!
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string line;
    string str;
    string s;
    //getline(cin, line);
    //cout << line <<endl;
    /*for(int i = 0; i < line.size(); i++)
    {
        if(line[i] == '.')
        {
            str = line.substr(0, i);
            s = line.substr(i+1, line.size()-i-1);
            break;
        }
    }*/
    getline(cin, str);
    getline(cin, s);
    string ret;
    for(int i = 0; i < str.size(); ++i)
    {
        if(s.find(str[i]) == string::npos)
        {
            ret = ret + str[i];
        }
    }
    cout << ret << endl;
}

发表于 2017-12-17 13:14:18 回复(0)
//用javascript
function delectAfromB(sA,sB){ 
	var arrA = sA.split("");
	var arrB = sB.split("");
    for(var i=0; i<arrB.length; i++){
        for(var j=0; j<arrA.length; j++){
            if(arrB[i]===arrA[j]){
                arrA.splice(j,1);
            }
        }
    }
    return arrA.join("");
}

//for test
var a="They are students.";
var b="aeiou";
console.log(delectAfromB(a,b));//Thy r stdnts.

发表于 2017-03-14 18:28:07 回复(4)
#include <stdio.h>
#include <string.h>
int main(){
    char a[1000],b[1000];
    int i,j,flag;
    while(gets(a)){
        gets(b);
        for(i=0;i<strlen(a);i++){
            flag=0;
            for(j=0;j<strlen(b);j++){
                if(a[i]==b[j])
                    flag=1;
            }
            if(flag==0)
                printf("%c",a[i]);
        }
        printf("\n");
    }
}
发表于 2018-04-07 10:33:42 回复(0)
import java.util.*;
public class Main{ 
public static void main(String[] args) {
       Scanner scanner=new Scanner(System.in);
       String act=scanner.nextLine();
       String del=scanner.next();

       Set<Character> delstr=new HashSet<>();
       for (int i=0;i<del.length();i++)
        {
            delstr.add(del.charAt(i));
        }

       for (int i=0;i<act.length();i++)
       {
           char c=act.charAt(i);
           if (!delstr.contains(c))
           {

                 System.out.print(c);
           }
       }

    }
}

发表于 2022-04-21 20:06:48 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Set<Character> hash = new HashSet<>();
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        for (int i = 0; i < str2.length(); i++) {
            hash.add(str2.charAt(i));
        }
        StringBuffer ret = new StringBuffer();
        for (int j = 0; j < str1.length(); j++) {
            char n = str1.charAt(j);
            if (!hash.contains(n)){
                ret.append(n);
            }
        }
        System.out.println(ret);
    }
}

发表于 2022-03-21 17:09:24 回复(0)
#include<iostream>
#include<string>
using namespace std;
int main(){
    // 注意这里不能使用cin接收,因为cin遇到空格就结束了。
    // oj中IO输入字符串最好使用getline。
    string str1,str2;
    //cin>>str1;
    //cin>>str2;
    getline(cin, str1);
    getline(cin, str2);
    // 使用哈希映射思想先str2统计字符出现的次数
    int hashtable[256] = {0};
    for(size_t i = 0; i < str2.size(); ++i){
        hashtable[str2[i]]++;
    }
    // 遍历str1,str1[i]映射hashtable对应位置为0,则表示这个字符在
    // str2中没有出现过,则将他+=到ret。注意这里最好不要str1.erases(i)
    // 因为边遍历,边erase,容易出错。
    string ret;
    for(size_t i = 0; i < str1.size(); ++i){
        if(hashtable[str1[i]] == 0){
            ret += str1[i];
        }       
    }
    cout<<ret<<endl;
    return 0;
}

发表于 2019-07-23 01:02:20 回复(0)
Python
n,m = input().split(),input().strip()
ans = []
for each in n:
    temp = []
    for i in each:
        if i not in m:
            temp.append(i)
    ans.append(''.join(temp))
print(' '.join(ans))
这道题的输入格式描述有问题,是两行输入,并不是一行输入用空格分割,浪费了很多时间
发表于 2018-07-08 22:01:50 回复(0)
import java.util.Scanner;
//笨人的解题思路,如有不对,敬请谅解phone:18845636132
public class Main
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        //有空格,空格到‘z’的距离90
        int[] strs = new int[90];
        //获得较小的字符串数组
        char[] temp0 = (str1.length()>=str2.length()?str2:str1).toCharArray();
        //存在加1
        for(char s:temp0) {
            strs[s-32]++;
        }
        String result = "";
        //获得较大数组
        char[] temp1 = (str1.length()>str2.length()?str1:str2).toCharArray();
        for(char s: temp1) {
            //如果strs对应位数为零,则将该数加入到结果中
            if(strs[s-32]==0) {
                result = result+s;
            }
        }
        System.out.println(result);
    }
}

发表于 2018-05-03 16:59:30 回复(1)
java    O(n^2)
import java.util.*;
//                删除公共字符
public class DeleteSubString {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s1 = scan.nextLine();
        String s2 = scan.nextLine();
        String s3 = "";
        int n1 = s1.length();
        int n2 = s2.length();
        boolean flag = false;
        
        for(int i = 0 ;i < n1; i++) {
            char c = s1.charAt(i);
            flag = false;
            for(int j = 0; j < n2; j++) {
                if(s2.charAt(j) == c){
                    flag = true;
                }
    
            }
            if(!flag) {
                s3 = s3 + s1.substring(i, i+1);
            }
        }
        System.out.println(s3);
        scan.close();
    }

}
发表于 2018-04-13 17:01:37 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String firstString = sc.nextLine();
        String secondString = sc.nextLine();
        
        for(int i = 0;i<secondString.length();i++){
            firstString = firstString.replaceAll(secondString.charAt(i)+"", "");
        }
        System.out.println(firstString);
    }
}

发表于 2018-04-10 17:13:12 回复(0)
#include <bits/stdc++.h>

using namespace std;

int main()
{     string s,t;     getline(cin, s);     getline(cin, t);         for(int i=0;i<t.length();i++)      {         int p;         while((p=s.find(t[i])) != -1)             s.erase(p, 1);     }     cout<<s<<endl;     return 0;
}

发表于 2018-01-06 01:05:29 回复(0)
import java.util.*;
public class Main {
    /*
     * 删除公共字符
     */
    public static void main(String[] args) {
      
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String s2 = sc.nextLine();
        String[] ss = s.split(" ");
        String[] s1 = new String[ss.length];
        String res = "";
        for(int i=0;i<ss.length;i++){
                s1[i] = ss[i];
        }
        //得到了一个目标字符串数组s1 和一个字符串s2
        for(int i=0;i<s1.length;i++){
            char[] r = s2.toCharArray();
            for(int j=0;j<r.length;j++){
                if(s1[i].contains(String.valueOf(r[j]))){
                    s1[i] = s1[i].replace(r[j], ' ');
                }
                s1[i]=s1[i].trim();
                s1[i]=s1[i].replace(" ", "");
            }
        }
        for (String string : s1) {
            res+=string+" ";
        }
        System.out.println(res);
    }
} 

    出现以上的错误提示,把res的空格去除,改成res.trim(),运行通过!
发表于 2017-09-14 10:52:00 回复(0)
// 直接去掉在第二个字符串里面的字符就行,为了快速查找,直接用了set的数据结构
import java.util.Scanner;
import java.util.HashSet;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        HashSet set = new HashSet<Character>();
        while(sc.hasNext()){
            String str1 = sc.nextLine();
            String str2 = sc.nextLine();
            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++){
                if(!set.contains(str1.charAt(i))){
                    sb.append(str1.charAt(i));
                }
            }
            System.out.println(sb.toString());
            set.clear();
        }
    }
}


发表于 2017-09-05 21:50:54 回复(0)
#include <iostream>
#include <string>
using namespace std;

int main()
{
	string str1, str2;
	getline(cin, str1);
	getline(cin, str2);
	for (int i = 0;i < str1.size();++i)
		for (int j = 0;j < str2.size();++j)
		{
			if (str1[i] == str2[j])
			{
				str1.erase(i, 1);
				i -= 1; 
				break;
			}
		}	
	cout << str1 << endl;
	return 0;
}

发表于 2017-09-04 18:05:55 回复(0)
import java.util.Scanner;

/**
 * Created by Administrator on 2017/9/3.
 */
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String str=in.nextLine();
        int[] a=new int[256];
        char[] ch=in.nextLine().toCharArray();
        for(int i=0;i<ch.length;i++){
            a[ch[i]]=1;
        }
        for(int i=0;i<str.length();i++){
            if(a[str.charAt(i)] != 1){
                System.out.print(str.charAt(i));
            }
        }
    }
}


发表于 2017-09-04 16:34:55 回复(0)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void delet(string &s, string &s_base)
{
	for (int i = 0; i<s.size(); ++i)
	{
		for (int j = 0; j<s_base.size(); ++j)
		{
			if (s[i] == s_base[j])			
				s.erase(i, 1);					
		}

	}

}

int main()
{
	string str, s_ba;
	vector<string> svec;
	while (cin >> str)
	{
		svec.push_back(str);
		if (getchar() == '\n')
			break;
	}	
	cin >> s_ba;
	for (int i = 0; i<svec.size(); ++i)
		delet(svec[i], s_ba);
	for (vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
	{
		cout << *iter;
		if (iter != svec.end() - 1)
			cout << " ";
		else
			cout << endl;
	}
	return 0;
}

编辑于 2017-09-01 17:07:03 回复(0)
import java.util.Scanner;

public class Main {

public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
Scanner sc1 = new Scanner(System.in);
String str1 = sc1.nextLine();
for(int i =0;i<str1.length();i++){
str = str.replaceAll(String.valueOf(str1.charAt(i)),"");
}
System.out.println(str); 
}

}


不通过
您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为0.00%

测试用例:
They are students.
aeiou

对应输出应该为:

Thy r stdnts.

你的输出为:
空。请检查一下你的代码,有没有循环输入处理多个case。



麻烦看下哪里有问题呢,明明可以的
发表于 2017-08-24 16:47:49 回复(1)
小弟刚学两三个星期的编程···写得不好请见谅并指出
j=input()
k=input()

a=[]
for i in range(0,len(j)):
    a.append(j[i])
b=[]
for i in range(0,len(k)):
    b.append(k[i])

i=len(a)-1
while i>=0:
    if a[i] in b:
        del a[i]
    i-=1

print("".join(a))


发表于 2017-08-15 01:41:34 回复(0)
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);
    int a[256]={0};
    for(int i=0;i<s2.size();i++)
        a[s2[i]]++;
    for(int i=0;i<s1.size();i++)
    {
        if(a[s1[i]])
            continue;
        cout<<s1[i];
    }
    cout<<endl;
    return 0;
}

发表于 2017-08-10 23:06:29 回复(1)
#include<iostream>
#include<string>
using namespace std;
int main()
 {
    string s1,s2;
    while(getline(cin,s1)&&getline(cin,s2))
      {
        // getline(cin,s2);     //一定要注意含空格的字符串不能直接用cin输入
         int len1=s1.length();  //应该用getline
         int len2=s2.length();
         for(int i=0;i<len2;i++)
           {
              for(int j=0;j<len1;j++)
                {
                  if(s1[j]==s2[i])   //对于s2中每个字符串,依次遍历s1,若有相同的
                      {              //将其后面所有的字符串向前移动一位,覆盖
                         for(int k=j;k<len1;k++)
                             s1[k]=s1[k+1];  
                      }
                }
           }
         cout<<s1<<endl;
      }
 }

发表于 2017-07-23 16:11:08 回复(0)