写在前面
- 实现思路
- 字符数组存放字符串
- 字符串空值,
读取异常,scanf("%s", str);
有效,测试点2cin.getline(str, maxn);
- 整型、布尔数组初始化,
int hashTable[256]; memset(hashTable, 1, sizeof(hashTable));
- 字符串空值,
- 字符数组存放字符串
- 存在部分知识盲点,耗费近1个小时,多次提交
- 理顺耗费时间较长(存在知识盲点)
测试用例
input:
7+IE.
7_This_is_a_test.
output:
_hs_s_a_tst
input:
NULL
7_This_is_a_test.
output:
7_This_is_a_test.
ac代码(优化后)
- 参考算法笔记(代码无效)
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 100010;
int hashTable[256];
char str[maxn];
int main()
{
memset(hashTable, 1, sizeof(hashTable));
cin.getline(str, maxn);
int len = strlen(str);
for(int i=0; i<len; i++)
hashTable[tolower(str[i])] = 0;
cin.getline(str, maxn);
len = strlen(str);
for(int i=0; i<len; i++)
{
if(str[i]>='A' && str[i]<='Z')
{
if(hashTable[tolower(str[i])]>0 && hashTable['+']>0)
printf("%c", str[i]);
}
else if(hashTable[str[i]]>0)
{
printf("%c", str[i]);
}
}
return 0;
}
学习代码
- 实现逻辑
- 字符串查找函数实现(英文字母的坏键以大写给出)
- 源大小写,大写找到,下一次循环
- 源大写找不到,上档键坏掉,下一次循环
- 源大写找不到,上档键正常,打印输出
- 源小写、源特殊字符找不到,打印输出
- 字符串查找函数实现(英文字母的坏键以大写给出)
#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;
}
知识点小结
// 字符串最大长度, 4611686018427387897
string s;
cout << s.max_size() << endl;
memset(hashTable, 1, sizeof(hashTable));
// 空值读取1
char str[maxn];
cin.getline(str, maxn);
// 空值读取2
string bad, should;
getline(cin, bad);
// 字符串查找函数
bad.find(toupper(should[i])) != string::npos