A1050 String Subtraction (20分)

// A1050 String Subtraction (20分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
/*
考察:hash+类似旧键盘打字

题意:
给一个字符串1,再给另一个字符串2,要求删除字符串1中出现的字符串2的值
包括空格,跟所有可见的ASCII

解题:
1、第一个字符串存起来,第二个做hash
2、遍历第一个字符串,如果hash为true,不输出,不然接着输出

learn && wrong;
1、hashtable设置成256,并且,是可以用字符为下标的
2、可见的ASCII codes,不可见是0~31以及127的,答案给了128个而已,也就是大小写,+数字
3、i < strlen(str)是个不好的习惯,因为strlen时间复杂度就是O(n)了
4、使用了iostream和vector + using namespace std,不要用hash,会重名,跟c.math中的y1一样
5、可以用getchar一个一个输入,见P142,太慢,不干,就跟str[num++]一样
也就三步,

while(true),
str[len1++],
if   str[len1 - 1]== ‘\n’ ;break

*/

#include 
#include 
using namespace std;

char str1[10010];
char str2[10010];
bool hash1[256];

int main()
{
    cin.getline(str1, 10010);
    cin.getline(str2, 10010);
    int len2 = strlen(str2);
    int len1 = strlen(str1);
    memset(hash1, true, sizeof(hash1));


    for (int i = 0;i < len2;++i) {  //标记字符串2中的字符
        hash1[str2[i]] = false;
    }
    
    for (int i = 0;i < len1;++i) {
        if (hash1[str1[i]] == false) continue;
        else cout << str1[i];
    }

    return 0;
}

你可能感兴趣的:(A1050 String Subtraction (20分))