题目
Given two strings S1 and S2 , S=S1 −S2 is defined to be the remaining string after taking all the characters in S2 from S1 . Your task is simply to calculate S1 −S2 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 S1 and S2 , respectively. The string lengths of both strings are no more than 104 . 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 S1 −S2 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;
}