c++/输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

 # 题目

输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

//要求:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

#include <iostream>
using namespace std;

int main1(void){
    //在assic码表中:
    //48-57是10个数字,65 ~ 90 为大写字母,97 ~ 122 为小写字母
    //“空格(Space)的ASCII码值是32,,剩下的是特殊字符了

    int letter = 0, space = 0, digit = 0, others = 0;//字母,空格,数字和其它

    //使用循环接收用户输入,知道获取回车为止
    //在循环中嵌套if语句,对每一个输入的字符进行判断
    char c;
    cout<<"请输入需要分类计数的文本:";
    while((c = getchar())!= '\n'){
        //我们是可以用int()将c转换为数字判断他的范围,
        //不过char类型也是可以比大小的,原理一样
        if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
            letter++;
        else if(c>='0'&&c<='9')
            digit++;
        else if(c==' ')
            space++;
        else
            others++;
    }
    cout<<"字母数:"<<letter<<"数字数:"<<digit<<"空格数:"<<space<<"其它字符数:"<<others;

    return 0;

    //除此之外,你还可以先将输入的文本保存在变量中,然后遍历这个变量进行统计
    //可以尝试使用字符数组,这样做的缺点是你无法准确预测用户输入多少个字符,太大浪费内存,太小可能溢出(strlen()用来获取字符串长度)
    //建议使用C++新增的数据类型string来储存,使用string类型时我们不必再定义他的长度,此外还有其他更方便易用的属性。
    //有别于c语言中的strlen()c++中string提供了两种不同方式来获取string字符串的长度,分别是int len1 = str.size();
    //int len2 = str.length();
}

//string并不是内置的数据类型,而是C++标准库中声明的一个字符串类
//在使用它之前我们需要先导入<stirng>
#include <string>
#include <iostream>
using namespace std;

int main(void){
    //这次我们利用string来重做
    string text;
    cout<<"请输入需要分类计数的文本:";
    //这是我开始实用的方法
    //cin>>text;
    //很遗憾它报错了,
    //错误情况,输入“I create a new virtual world!”打印text的值发现只有“I”
    //以下是失败的原因:
    //cin 遇空格停止识别,虽然输入很长一串字符,但是cin在第一个遇到第一个空格就停止输入
    //解决办法使用getline把停止识别的符号设置为‘\n’
    //cin.getline(text,"\n");
    //getline(std::cin,text);
    getline(cin, text);
    //cout<<text<<endl;

    //注意这里有坑
    //在C++中本质上有两种getline函数
    //第一种:在头文件中,是iostream类的成员函数。
    //调用方式std::cin.getline(char* s, streamsize n, char delim );
    //函数原型:
    //istream& getline (char* s, streamsize n );
    //istream& getline (char* s, streamsize n, char delim );
    //作用: 从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,
    //      如果遇到delim 或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。
    //第二种:在头文件中,是普通函数。
    //调用方式:std::getline(istream&  is, string& str, char delim)
    //用法和上第一种类似,但是读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。
    //函数的变量:
    //is :表示一个输入流,例如 cin。
    //str :string类型的引用,用来存储输入流中的流信息。
    //delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。
    //在此处我们的text是string型数据显然使用第二种,而因为我们已经定义过 using namespace std;且不需要刚更改默认的终止符(换行符)
    //所以最终有了合法语句getline(cin, text);


    int letter_A = 0, letter_a = 0 ,space = 0, digit = 0, others = 0;//大写字母,小写字母,空格,数字和其它

    //接下来简单了,把上一个程序的第一个判断条件拆分开来就好
    for(int i=0;i<text.size();i++){
        if(text[i]>='a'&&text[i]<='z')
            letter_a++;
        else if(text[i]>='A'&&text[i]<='Z')
            letter_A++;
        else if(text[i]>='0'&&text[i]<='9')
            digit++;
        else if(text[i]==' ')
            space++;
        else
            others++;
    }

    cout<<"大写字母数:"<<letter_A<<"小写写字母数:"<<letter_a<<"数字数:"<<digit<<"空格数:"<<space<<"其它字符数:"<<others;
    return 0;
}

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年12月14日
下一篇 2023年12月14日

相关推荐