天天看点

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

题目要求:

编写程序,输入一个长度不超过40的字符串s,统计其中大写字母、小写字母、数字字符、空格及其其他字符的个数。

例如:输入:Ab c2:3dA A709 bM.c454>AA#[email protected],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,

继续阅读