Mr.Kun 发表于 2021-1-25 17:21:47

入门字符串分类统计 其他类型出错

一个简单入门题   
要求:输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
例如:aklsjflj123 sadf918u324 asdf91u32oasdf/.';123
输出结果为:23 16 2 4
但按照我写的代码
#include<stdio.h>
#include<string.h>

int main()
{
        char str;
        int a=0,b=0,c=0,d=0,i,n;
        gets(str);
        n=strlen(str);
        for(i=0;i<n;i++){
                if(str>='A'&&str<='Z'||str>='a'&&str<='z'){
                        a++;
                }
                if(str>='0'&&str<='9'){
                        b++;
                }
                if(str==' '){
                        c++;
                }
                else
                  d++;
        }
        printf("%d %d %d %d",a,b,c,d);
        return 0;
}
输出结果为:23 16 2 43这个其他字符类型一直不对这是为何

xieglt 发表于 2021-1-25 17:31:15

if(str>='A'&&str<='Z'||str>='a'&&str<='z'){
                        a++;
                }
               elseif(str>='0'&&str<='9'){
                        b++;
                }
                elseif(str==' '){
                        c++;
                }
                else
                  d++;

jackz007 发表于 2021-1-25 20:09:35

本帖最后由 jackz007 于 2021-1-25 20:12 编辑

      所有的判断必须一脉相承,成为一个体系,d 的值才能正确,因为 d 的值必须是排除了前面所有的情况之后的结果,目前的情况是,只要当前字符不是空格,d 就加 1 。
                if(str>='A'&&str<='Z'||str>='a'&&str<='z'){
                        a++;
                }
                if(str>='0'&&str<='9'){
                        b++;
                }
                if(str==' '){
                        c++;
                }
                else
                  d++;
      改为
                if(str>='A'&&str<='Z'|| str>='a' && str <='z'){
                        a ++ ;
                } else if(str>='0'&&str<='9'){
                        b ++ ;
                } else if(str==' '){
                        c++ ;
                } else {
                        d ++ ;
                }
      就妥了
页: [1]
查看完整版本: 入门字符串分类统计 其他类型出错