L1-011 A-B (20 分) 字典标记法
L1-011 A-B (20 分)
本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。
输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。
输出格式:
在一行中打印出A−B的结果字符串。
输入样例:
I love GPLT! It's a fun game!
aeiou
输出样例:
I lv GPLT! It's fn gm!
解题思路:
- 利用字符特有的ASCII对相应的字符做标记。 book[a[i]] = 1
- 把输入文字对照标记字典查询该字符是否被标记。 if(book[s[i]] == 1)
- int book[256]; 申请字典空间!
- 可以用这个 n[ch[i]-'a']++; 代替字典仅进行对字母部分的操作!
#include <iostream>
#include <stdio.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int book[256];//做了一本字典标记
string s, a;
getline(cin, s);
getline(cin, a);
for(int i = 0; i < a.length(); i++) {
book[a[i]] = 1;//把字典中的相应字符标记
}
for(int i = 0; i < s.length(); i++) {
if(book[s[i]] == 1) {//如果该字符已被标记直接跳过,利用
continue;
}
cout << s[i];
}
return 0;
}

浙公网安备 33010602011771号