C ++:检查字符串的内容

时间:2014-12-09 14:36:57

标签: c++ logic

抱歉,我使用的是古代编译器

#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 ++新手

1 个答案:

答案 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++)