【PAT】A1050 String Subtraction【散列】

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.

题意

给出两个字符串,输出第一个字符串删去第二个字符串中的所有字符的结果。

思路

最简单的散列题,注意字符串有空格,输入需要使用fgets。

#include <cstdio>
#include <cstring>
// 最大长度10^4,再加上行末的\n和字符串结尾的\0,所以最大长度定位10^4 + 2
#define MAX_LENGTH 10002
#define L 256
int main() {
    char str1[MAX_LENGTH], str2[MAX_LENGTH];
    bool marked[L] = {false};
    fgets(str1, MAX_LENGTH, stdin);
    fgets(str2, MAX_LENGTH, stdin);
    
    // 遍历标记删去的字符
    for(int i = 0, l = (int)strlen(str2); i < l; i++){
        marked[str2[i]] = true;
    }
    
    // 遍历输出
    for(int i = 0, l = (int)strlen(str1); i < l; i++){
        if(marked[str1[i]]) continue;
        putchar(str1[i]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值