抱歉,我使用的是古老的编译器
#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语句/三元运算符/ switch case来实现相同的效果。如果是,我能带头吗?
对于HoosierEE表示感谢
更新:是否可以在不使用内置函数的情况下与hoosierEE的答案相同?
-一位想学习的C ++新手
如果只想避免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值并在其中放置数字,但是我认为使用字符文字更易读。个人喜好。
您还可以考虑对终止条件进行更严格的规定:
for (int x = 0; s[x] != '\0'; x++)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句