我在看一个函数:
bool StringWrap::isAlpha() const {
int sz = st.size();
for (int i = 0; i < sz; i++) {
if (!( ('a' <= st[i] && st[i] <= 'z')
|| ('A' <= st[i] && st[i] <= 'Z') ) ) {
return false;
}
}
return true;
}
在这种情况下,st
是string
。我想知道'a' <= st[i]
的逻辑陈述是什么意思?当我想要做一个小于或等于比较时,我会想到数字,而不是字符。
答案 0 :(得分:4)
('a' <= st[i] && st[i] <= 'z')
此表达式正在测试st[i]
是否为小写字符。以下是所有ASCII字符:
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~
这些是'a' <= st[i]
(“至少'a'
”)为真的那些:
abcdefghijklmnopqrstuvwxyz{|}~
(请注意'a'
以下的所有字符都被删除了。)
这些是st[i] <= 'z'
(“最多'z'
”)为真的那些:
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz
(请注意'z'
以上的所有字符都被删除了。)
最后,这两个条件都是真的:
abcdefghijklmnopqrstuvwxyz
顺便说一下,方法体可以简化为一行:
#include <algorithm>
#include <cctype>
bool StringWrap::isAlpha() const
{
return std::all_of(st.begin(), st.end(), isalpha);
}