题目 A1084

-
题意
根据输入的两个字符串判断输出坏掉的键,不用重复输出,字母用大写输出。 -
思路
用原始串扫描输出串,不相同的字符即为坏掉的键,输出时需判断之前是否已记录过,这里我采取map的方法做映射。
注意:可能扫描完了输出串,原始串后部分还未判断。 -
Code in C++
#include <cctype>
#include <cstdio>
#include <map>
#define maxn 85
int main()
{
char origin[maxn], out[maxn];
scanf("%s", origin);
scanf("%s", out);
std::map<char, int> worn;
int i, j;
for (i = 0, j = 0; origin[i] != '\0' && out[j] != '\0'; ++i) {
if (origin[i] != out[j]) {
char tmp = origin[i];
if (isalpha(tmp)) {
tmp = toupper (tmp);
}
if (worn.count(tmp)== 0) {
printf("%c", tmp);
worn[tmp] = 1;
}
} else {
++j;
}
}
// 判断原串最后一位
for (; origin[i] != '\0'; ++i) {
char tmp = origin[i];
if (isalpha(tmp)) {
tmp = toupper (tmp);
}
if (worn.count(tmp)== 0) {
printf("%c", tmp);
worn[tmp] = 1;
}
}
return 0;
}
题目 B1033 旧键盘打字

-
题意
给出坏掉的键和原始串,输出显示的串。 -
思路
这里其实主要就是记住坏掉的键和关于大写字母输出的逻辑即可。坏掉键中的大写字母都换为小写字母(不换将输入串的小写变大写再判断也可以)。
注意:坏掉的键可能输入很长也可能为空,也需要用长串变量接收,采取getline方式。最后需要输出空行。 -
Code in C++
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
bool hashTable[256];
std::string str;
int main()
{
memset(hashTable, true, sizeof(hashTable));
getline(std::cin, str);
for (int i = 0; i < str.size(); ++i) {
if (str[i] >= 'A' && str[i] <= 'Z')
str[i] = str[i] - 'A' + 'a';
hashTable[str[i]] = false;
}
getline(std::cin, str);
for (int i = 0; i < str.size(); ++i) {
if (str[i] >= 'A' && str[i] <= 'Z') {
char tmp = str[i] - 'A' + 'a';
if (hashTable[tmp] == true && hashTable['+'] == true ) {
printf("%c", str[i]);
}
} else if (hashTable[str[i]] == true){
printf("%c", str[i]);
}
}
printf("\n");
return 0;
}
小结
字符串的输入方式还是没有掌握地很好。然后就是题目中的一些细节没有掌握还有一些逻辑写错了地方导致debug了很久。
本文分享了两道编程题目的解决方案,分别是通过对比字符串找出坏掉的键盘按键,以及根据坏掉的按键和原始字符串输出实际显示的字符串。文章详细介绍了使用C++实现的思路和代码,包括如何处理大小写字母的转换和特殊字符。
652

被折叠的 条评论
为什么被折叠?



