L1-011 A-B (20 分) 字典标记法

L1-011 A-B (20 分)

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

输入格式:

输入在2行中先后给出字符串A和B。两字符串的长度都不超过10​4​​,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:

在一行中打印出A−B的结果字符串。

输入样例:

I love GPLT!  It's a fun game!
aeiou

输出样例:

I lv GPLT!  It's  fn gm!

 解题思路:

  1. 利用字符特有的ASCII对相应的字符做标记。  book[a[i]] = 1
  2. 把输入文字对照标记字典查询该字符是否被标记。 if(book[s[i]] == 1)
  3. int book[256]; 申请字典空间! 
  4. 可以用这个     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;
}

类似例题推荐:

SMU OnlineJudge

posted @ 2021-07-22 17:11  "星尘"  阅读(134)  评论(0)    收藏  举报