我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805288530460672
题目描述:
知识点:字符串
思路:用一个数组brokens记录破损的按键
本题有两个坑点:
(1)测试点2中第1行输入为空,如果用cin直接读入,会把第二行当成第一行数据读入,而第二行数据则为空串。因此需要用getline函数读取一整行数据。
其实题目说了——“题目保证第2行输入的文字串非空”,这有种此地无银三百两的感觉,疯狂暗示我们第一行输入的文字串可能是空行。
(2)如果没有一个字符能被打出,需要输出空行。
C++代码:
#include<iostream>
using namespace std;
int main() {
string brokenString;
string inputString;
char c;
getline(cin, brokenString);
getline(cin, inputString);
bool brokens[41];//索引0~25存储a-z,26~35存储数字0~9,36存储_,37存储',',38存储'.',39存储'-',40存储'+' true表示未损坏,false表示损坏
for(int i = 0; i < 41; i++) {
brokens[i] = true;
}
for(int i = 0; i < brokenString.length(); i++) {
if(brokenString[i] >= 'A' && brokenString[i] <= 'Z') {
brokens[brokenString[i] - 'A'] = false;
} else if(brokenString[i] >= '0' && brokenString[i] <= '9') {
brokens[brokenString[i] - '0' + 26] = false;
} else if(brokenString[i] == '_') {
brokens[36] = false;
} else if(brokenString[i] == ',') {
brokens[37] = false;
} else if(brokenString[i] == '.') {
brokens[38] = false;
} else if(brokenString[i] == '-') {
brokens[39] = false;
} else if(brokenString[i] == '+') {
brokens[40] = false;
}
}
string outputString = "";
for(int i = 0; i < inputString.length(); i++) {
if(inputString[i] >= 'a' && inputString[i] <= 'z' && brokens[inputString[i] - 'a']) {
outputString += inputString[i];
} else if(inputString[i] >= 'A' && inputString[i] <= 'Z' && brokens[inputString[i] - 'A'] && brokens[40]) {
outputString += inputString[i];
} else if(inputString[i] >= '0' && inputString[i] <= '9' && brokens[inputString[i] - '0' + 26]) {
outputString += inputString[i];
} else if(inputString[i] == '_' && brokens[36]) {
outputString += inputString[i];
} else if(inputString[i] == ',' && brokens[37]) {
outputString += inputString[i];
} else if(inputString[i] == '.' && brokens[38]) {
outputString += inputString[i];
} else if(inputString[i] == '-' && brokens[39]) {
outputString += inputString[i];
}
}
if(outputString.length() == 0) {
printf("\n");
} else {
cout << outputString << endl;
}
return 0;
}
C++解题报告: