抱歉,我使用的是古代编译器
#include <iostream.h>
#include <conio.h>
#include <ctype.h>
void main()
{
char s[6] = "mOh1t*";
int u = 0 , l=0 , d=0 , sp=0 , t = 0;
for (int x = 0 ; s[x] ; x++)
{
if (isupper(s[x]))
u++;
else if(islower(s[x]))
l++;
else if (isdigit(s[x]))
d++;
t++;
}
sp = t - (u+l+d);
cout<<"t:"<<t;
cout<<"u:"<<u;
cout<<"l:"<<l;
cout<<"d:"<<d;
cout<<"sp:"<<sp;
getch();
}
上面的代码清楚地计算字母表中的字母数(大写和小写),位数和特殊字符数。
我想知道是否可以使用if语句/三元运算符/开关大小写 。 如果是的话,我可以获得领先优势吗?
向HoosierEE致谢
更新:在不使用内置功能的情况下,是否可以像hoosierEE的答案一样做?
- 一位想要学习的C ++新手
答案 0 :(得分:4)
如果您只想避免if语句,可以将布尔值视为0和1,并总结如下字符:
for (int x = 0; s[x]; x++)
{
u += isupper(s[x]);
l += islower(s[x]);
d += isdigit(s[x]);
t++;
}
...但是正如@Angew所提到的那样,你不能依赖于这些函数只能得到0或1的结果。
要回答 UPDATE ,以下是如何在没有stdlib功能的情况下实现您的目标:
for (int x = 0; s[x]; x++)
{
u += ((s[x] >= 'A') && (s[x] <= 'Z'));
l += ((s[x] >= 'a') && (s[x] <= 'z'));
d += ((s[x] >= '0') && (s[x] <= '9'));
t++;
}
您可以查找ASCII values并在其中输入数字,但我认为使用字符文字更具可读性。个人偏好。
您可能还会考虑对终止条件稍加严格:
for (int x = 0; s[x] != '\0'; x++)