前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PAT1050 String Subtraction (20分) 用布尔数组

PAT1050 String Subtraction (20分) 用布尔数组

作者头像
vivi
发布2020-07-14 10:59:20
3110
发布2020-07-14 10:59:20
举报
文章被收录于专栏:vblog

题目

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 S1​​​ −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:

代码语言:javascript
复制
They are students.
aeiou

Sample Output:

代码语言:javascript
复制
Thy r stdnts.

解析

  • 所谓 s1 - s2 就是从s1中去除出现在s2中的字符,输出剩余部分。
  • 所以可以逐个判断s1的字符,判断其是否在s2中出现,若未出现则输出,否则跳过即可。
  • 为了操作简单,使用一个布尔数组flag[256]ascii字符也就是0-255,所以遍历一次s2,将flag[s2[i]]设置为true即表示当前字符在s2中出现过。

代码

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <string.h>
using namespace std;

int main() {
    string s1, s2;
    // 原字符串中包含空格,使用getline
    getline(cin, s1);
    getline(cin, s2);
    int len1 = s1.length(), len2 = s2.length();
    bool flag[256] = {false};
    // 在s2中出现的字符,在s1中剔除
    for (int i = 0; i < len2; ++i) flag[s2[i]] = true;
    // 逐个字符判断,若未在s2中出现则输出
    for (int i = 0; i < len1; ++ i)
        if (!flag[s1[i]]) cout << s1[i];
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 解析
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档