假设我有非常长的字符串,并且想要查看某列是否全部为小写、大写或混合大小写。例如,对于以下列:
文本应该是
text
"hello"
"New"
"items"
"iTem12"
"-3nXy"
文本应该是
mixedCase
。一个简单的算法来确定这一点可能是:int is_mixed_case, is_all_lower, is_all_upper;
int has_lower = 0;
int has_upper = 0;
// for each row...for each column...
for (int i = 0; (c=s[i]) != '\0'; i++) {
if (c >='a' && c <= 'z') {
has_lower = 1;
if (has_upper) break;
}
else if (c >='A' && c <= 'Z') {
has_upper = 1;
if (has_lower) break;
}
}
is_all_lower = has_lower && !has_upper;
is_all_upper = has_upper && !has_lower;
is_mixed_case = has_lower && has_upper;
我相信有一种更高效的方法来完成这个任务,但是什么算法/计算方法最有效呢?
strspn()
在相反的情况下搜索一个字符。 - Barmar(c >='a' && c <= 'z')
不具备可移植性。请使用isupper()
和islower()
。 - Andrew Henle