c++ - 法官在 cAPS LOCK 中说错误的答案
问题描述
每个人。在 Codeforces 上的问题cAPSlOCK中,法官说测试用例 3 的错误答案,即“cAPSlOCK”。现在,通过阅读问题并给出以下条件:
“让我们考虑一下在意外打开大写锁定键的情况下输入了一个单词,如果:
a) 要么只包含大写字母;b) 或除第一个字母外的所有字母都是大写的。”
考虑到上述情况,'cAPSlOCK' 应该更改为'CapsLock',因为除了'c' 之外,并非所有单词都是小写的,即'l'。
#include <iostream>
#include<string>
#include <iterator>
using namespace std;
int main()
{
string str;
cin>>str;
int count(0);
int len = str.length();
bool flag = true;
char first{str[0]};
if(isupper(first))
{
for(int i = 1; i<len; i++)
{
if(islower(str[i]))
{
count++;
}
}
}
count = count;
if (count == len - 1){flag = false;}
count = 0;
if(len = 1 && islower(first)){flag = true;}
while(flag)
{
for(auto& i : str)
{
if(isupper(i))
{
i = tolower(i);
}
else if (islower(i))
{
i = toupper(i);
}
}
break;
}
cout<<str<<endl;
}
因此,我的代码将“cAPSlOCK”转换为“CapsLock”,但所需的答案是“cAPSlOCK”
我非常感谢任何人在这里的意见。
解决方案
您真的应该使用调试器来查看代码的作用。使用调试器,您将看到输入cAPSlOCK
代码...
初始化
bool flag = true;
检查第一个字符是否为大写(不是)
if(isupper(first))
检查是否count
等于字符数 -1(计数仍然0
)
if (count == len - 1){flag = false;}
然后使用有错字的条件
if(len = 1 && islower(first)){flag = true;}
len = 1
是分配而不是比较。应该有一个编译器警告。不要忽略编译器警告!但是,即使修复该条件也不会改变最终结果,因为无论如何flag
仍然是。true
最终它将大写字母转换为小写字母,小写字母转换为大写字母:
while(flag)
....
你的逻辑是错误的。当条件说:
a) 要么只包含大写字母;b) 或除第一个字母外的所有字母均为大写字母。
那么你应该只在这些条件适用时才转换字符。你不应该flag = true
先检查条件。
如果您使用函数,您的代码将更具可读性。我建议为每个条件编写两个函数:
bool only_uppercase_letters(const std::string& input) {
//...
}
bool first_lower_and_all_others_upper_case(const std::string& input) {
//..
}
还有第三个转换字母的函数:
void transform_letters(std::string& input) {
// ...
}
然后main
可以简单得多:
int main() {
std::string inp;
std::cin >> inp;
if (only_uppercase_letters(inp) || first_lower_and_all_others_upper_case(inp)) {
transform_letters(inp);
}
std::cout << inp;
}
推荐阅读
- c++ - 当我包含 SoftTimer 库时,为什么 Arduino IDE 会给我一个编译错误?
- firebase - 使用 Firebase 流作为 Flutter 中另一个流的输入?
- clojure - 为什么在 Clojure 中将元数据添加到函数定义与其他形式的工作方式不同?
- bash - 为什么我的 if 语句将我的变量评估为空?
- javascript - JS 将对象数组转换为 JSON GroupBy 格式
- python - 线程上的 SQLAlchemy scoped_session 更新不会提交
- python - Heroku上的Flask App在部署后出现应用程序错误
- javascript - React 如何从数组中删除一个对象
- python - 使用 splitcopy 时通过 ssh 连接时返回 TimeoutError
- amazon-web-services - 如何将 VPC 出站流量列入白名单