自己写的代码提交结果中间有一个测试点不通过,得到了19分:
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 100001;
bool valid[256];
char key[maxn], input[maxn];
int main() {
memset(valid, true, sizeof(valid));
scanf("%s", key);
scanf("%s", input);
int len = strlen(key);
for (int i = 0; i < len; i++) {
valid[key[i]] = false;
}
len = strlen(input);
for (int i = 0; i < len; i++) {
if (input[i] >= 'A' && input[i] <= 'Z') {
if (valid['+'] && valid[input[i]]) {
cout << input[i];
}
}
else if(input[i] >= 'a' && input[i] <= 'z') {
if (valid[input[i] - 32]) {
cout << input[i];
}
}
else {
if (valid[input[i]]) {
cout << input[i];
}
}
}
return 0;
}
代码思路和晴神《算法笔记》代码一样,晴神代码提交后结果一样,也是同一个测试点不通过,19分。
然后是柳神代码:
#include <iostream>
#include <cctype>
using namespace std;
int main(){
string bad, should;
getline(cin, bad);
getline(cin, should);
for(int i = 0, length = should.length(); i < length; i++){
if(bad.find(toupper(should[i])) != string::npos) continue;
if(isupper(should[i]) && bad.find('+') != string::npos) continue;
cout << should[i];
}
return 0;
}
提交结果全AC。
自我感觉柳神代码思路也是一样的,问题出在哪里呢???
更新:
看了大佬们的经验,发现了问题所在,原代码使用scanf读入字符串,当坏键为空字符串时无法读入空字符串,更改为cin.getline
读入即可。