我正在尝试检查整个单词是否为大写,如果为真,则应返回真,否则返回假。
我目前的代码是:
#include "UpperCaseFilter.h"
#include "ReadFilteredWords.h"
#include "ReadWords.h"
#include <locale>
bool UpperCaseFilter::filter(string word) {
if(!word.empty()) {
for(int i = 0; i < word.length(); i++) {
if(isupper(word[i])) {
return true;
}
else {
return false;
}
}
}
}
这段代码的问题是,如果我有例如 HeLLO
,它将返回 true,因为我的最后一个字符是 true。如果整个字符串为真,我将如何只返回真。我使用计数器方法做到了,但它不是最有效的。
我也尝试使用 all_of
方法,但我认为我没有正确的编译器版本,因为它说 all_of isn't defined
(即使导入正确)。
我不确定还有什么其他方法可以解决这个问题。
原文由 beastlycplus 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的循环中不应有两个返回条件。相反,您可以使用循环来查找问题,如果没有问题,您将退出循环并告诉用户最后一切都很好。
在评论中你说“我相信如果字符串为空,它不需要返回任何东西”;但是,具有返回类型的函数,例如这个函数 总是 返回一些东西。如果你不指定返回值,它会给你一个,不管你喜欢与否。因此,您必须决定每个可能的输入的输出应该是什么。因此,我添加了一个 if 语句来强调空字符串的特殊条件。
请注意,您之前的函数签名是:
我已将其更改为:
const
保证函数不会改变word
并且&
符号将字符串传递给函数而不复制它。这使函数更快并节省内存。