c++或c统计不同类型字符个数

题目要求:

编写程序,输入一个长度不超过40的字符串s,统计其中大写字母、小写字母、数字字符、空格及其其他字符的个数。
例如:输入:Ab c2:3dA A709 bM.c454>AA#66@6B,A
          输出:8 5 11 3 6,

有好几个版本,如需要输入字符数的,不需要输入字符数的

c++是这样的,c++和c版本主要是输入输出的区别:

#include <iostream>
//#include<stdio.h>
//#include<string.h>
using namespace std;

int main(){
    int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大写字母,小写字母,数字,空格,其它字符个数,初值为0。

    int n=44; //字符数组最大的大小。


    char* arr=new char[n+1]; //定义字符数组arr,包含n个字符,最后一位为空字符。

    cout<<"输入字符串";
    cin.get(arr,n);
    int sum;
    cout<<"输入实际字符个数";
    cin>>sum; 

    for(int i=0;i<sum;i++){
        if ('Z'>=arr[i]&&(arr[i]>='A'))

            dx++;

        else if (('z'>=arr[i])&&(arr[i]>='a'))

            xx++;

        else if (('9'>=arr[i])&&(arr[i]>='0')) 

            sz++;

        else if(arr[i]==' ')

            kg++;
        else qt++;

    }
    cout<<dx<<' '<<xx<<' '<<sz<<' '<<kg<<' '<<qt;
return 0;


}

对于是否需要输入字符串长度(就是字符个数),可以采用strlen函数自动统计字符长度。用于循环是的限制,或者在for哪里for(i=0;arr[i]!='\0';i++)当arr为空是结束循环也行。

算法那一块的话没什么好说的,不过在输入哪里需要注意的是cin.get(arr,n)输入时可以包括空格,单单是cin遇到空格会停止的,

所以改进一下就是:这里是当arr[i]='\0'时停止循环,采用cin.get()函数输入

#include <iostream>
using namespace std;

int main(){
    int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大写字母,小写字母,数字,空格,其它字符个数,初值为0。

    int n=44; //字符数组最大的大小。


    char* arr=new char[n+1]; //定义字符数组arr,包含n个字符,最后一位为空字符。

    cout<<"输入字符串";
    cin.get(arr,n);

    for(int i=0;arr[i]!='\0';i++){

        if ('Z'>=arr[i]&&(arr[i]>='A'))

            dx++;

        else if (('z'>=arr[i])&&(arr[i]>='a'))

            xx++;

        else if (('9'>=arr[i])&&(arr[i]>='0')) 

            sz++;

        else if(arr[i]==' ')

            kg++;
        else qt++;

    }
    cout<<dx<<' '<<xx<<' '<<sz<<' '<<kg<<' '<<qt;
return 0;


}

c语言可以这样这里采用strlen统计字符串长度来结束循环,采用gets()输入字符串,

#include<stdio.h>
#include<string.h>

int main(){
    int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大写字母,小写字母,数字,空格,其它字符个数,初值为0。

    int n=40; //字符数组最大的大小。

    char* arr=new char[n+1]; //定义字符数组arr,包含n个字符,最后一位为空字符。
    gets(arr);
    
    n = strlen(arr);//统计字符串大小
    
    for(int i=0;i<n;i++){
        if ('Z'>=arr[i]&&(arr[i]>='A'))//是否为大写

            dx++;

        else if (('z'>=arr[i])&&(arr[i]>='a'))//是否为小写

            xx++;

        else if (('9'>=arr[i])&&(arr[i]>='0')) //是否为数字
            sz++;

        else if(arr[i]==' ')//是否为空格

            kg++;
        else qt++;//其他字符

    }
    printf("%d  %d  %d  %d  %d",dx,xx,sz,kg,qt);
return 0;


}

总体难度可能就是输入那里和循环的问题,思路就是输入一个字符串,然后从字符串第一个字符开始判断字符类型,对应类型数加1,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿哲-哲学的哲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值