PAT 1050 String Subtraction [hash]

Given two strings S​1​​ and S​2​​, S=S​1​​−S​2​​ is defined to be the remaining string after taking all the characters in S​2​​ from S​1​​. Your task is simply to calculate S​1​​−S​2​​ for any given strings. However, it might not be that simple to do it fast.

Input Specification:

Each input file contains one test case. Each case consists of two lines which gives S​1​​ and S​2​​, respectively. The string lengths of both strings are no more than 10​4​​. It is guaranteed that all the characters are visible ASCII codes and white space, and a new line character signals the end of a string.

Output Specification:

For each test case, print S​1​​−S​2​​ in one line.

Sample Input:

They are students.
aeiou

Sample Output:

Thy r stdnts.

----------------------------------这是题目和解题的分割线----------------------------------

However, it might not be that simple to do it fast. 题目已经给出明示不能用两层循环啦。

#include<stdio.h>
#include<string.h>

int main()
{
	int exsit[128] = {},i;
	char x1[10005],x2[10005];
	gets(x1);
	gets(x2); 
	//ASCII码表的起始值是'\0'  
	for(i=0;i<strlen(x1);i++)
		exsit[x1[i]-'\0'] = 1;
	for(i=0;i<strlen(x2);i++)
		exsit[x2[i]-'\0'] = 0;
	for(i=0;i<strlen(x1);i++)
		if(exsit[x1[i]-'\0']) printf("%c",x1[i]);
}

看书上才知道,原来bool数组的下标除了是可以int外还可以是char类型。在这种只需判断有无的题中会比较方便。

#include<cstdio>
#include<iostream>
#include<string>

using namespace std;

int main()
{
	bool exsit[128];int i;
	string x1,x2;
	getline(cin,x1);
	getline(cin,x2); 
	for(i=0;i<x1.length();i++)
		exsit[x1[i]] = true;
	for(i=0;i<x2.length();i++)
		exsit[x2[i]] = false;
	for(i=0;i<x1.length();i++)
		if(exsit[x1[i]]) printf("%c",x1[i]);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值