1050 String Subtraction (20)(20 分)
作者: CHEN, Yue
单位: PAT联盟
时间限制: 100ms
内存限制: 64MB
代码长度限制: 16KB
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.
这道题在做一个字符串的相减,实际上是做一个字符的差集,检测哪个字符该输出,哪个字符不该输出,这样的话,我们仍旧使用散列表的方法去进行检测会比较方便。
当然这次还是需要在前边 B 1033提到的PAT C++编译器无法使用gets的应对技巧
AC代码:
#include <cstdio>
#include <string.h>
int main() {
char s1[10010], s2[10010];
bool c[200] = {0};
fgets(s1, 10010, stdin);
fgets(s2, 10010, stdin);
int len1 = strlen(s1);
int len2 = strlen(s2);
if(s1[len1 - 2] == '\n' && s1[len1 - 1] == '\0') {
s1[len1 - 2] = s1[len1 - 1];
}
if(s2[len2 - 2] == '\n' && s2[len2 - 1] == '\0') {
s2[len2 - 2] = s2[len2 - 1];
}
for(int i = 0; s2[i] != '\0'; ++i) {
c[(int)s2[i]] = true;
}
for(int i = 0; s1[i] != '\0'; ++i) {
if(!c[(int)s1[i]]) {
printf("%c", s1[i]);
}
}
return 0;
}
如有错误,欢迎指摘。