zoukankan      html  css  js  c++  java
  • PAT1050 String Subtraction (20分) 用数组即可

    题目

    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:

    They are students.
    aeiou
    

    Sample Output:

    Thy r stdnts.
    

    解析

    • 所谓 s1 - s2 就是从s1中去除出现在s2中的字符,输出剩余部分。

    • 所以可以逐个判断s1的字符,判断其是否在s2中出现,若未出现则输出,否则跳过即可。

    • 为了操作简单,使用一个布尔数组flag[256]ascii字符也就是0-255,所以遍历一次s2,将flag[s2[i]]设置为true即表示当前字符在s2中出现过。

    代码

    #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;
    }
    
  • 相关阅读:
    git
    sublime text
    WIX安装图文并茂简易说明
    C#利用Lambda和Expression实现数据的动态绑定
    Ubuntu/CentOS下如何将普通用户提升到root权限
    虚拟机安装CentOS6.4用“桥接:直接连接到物理网线”不能上网的原因及解决方法
    C#利用lambda表达式将函数作为参数或属性跨类传递
    直接将XML存入到SQL中(SQL2008)
    C# 类中继承接口的属性
    提高开发效率的Visual Studio 2010使用技巧
  • 原文地址:https://www.cnblogs.com/codervivi/p/13232322.html
Copyright © 2011-2022 走看看