题目 1012: [编程入门]字符串分类统计——入门题

 一、说明

文章用于个人学习C++代码编写使用,前期只会简单的将代码粘贴上来,没时间整体说明。

后续会慢慢完善文章体系。

所有文章会放置在《C++代码编程》栏目里

所有的题目均来源于C语言网

ps:所有代码都是自己编写实现并通过的,可能不是最优解,后续会编写相应的最优解在文章后面

二、题目

题目描述

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

输入格式

一行字符,长度不超过200

输出格式

统计值

样例输入

aklsjflj123 sadf918u324 asdf91u32oasdf/.';123

样例输出

23 16 2 4

三、解题思路 

思路:题目要求统计四个部分:字母、数字、空格和其他字符,因此就需要分开单独考虑。

题目给定输入为一行字符,其中包括空格,因此不能直接使用cin输入,因cin遇到空格结束读取。

故设变量为string类型,且使用getline()函数进行输入读取。

另:考虑到C++中string类型本质上是一个char类型的数组,因此可以按照数组的逻辑进行考虑。将string变量每个字符看成一个单独的字符,因此考虑使用循环读取每个字符进行判断的逻辑。

四、代码实现

错误代码共5处错误点

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string str;
    int a,b,c,d;   //错误点1:统计数据没有初始化定义为0;
    getline(cin,str);
    for(int i = 0; i < str.length(); i++){    //错误点2:int是有定义类型,string属于无定义类型,int和string无法进行比较,修改为 “unsigned int i = 0”
        if((str[i] > 'a' && str[i] < 'z') || (str[i] > 'A' && str[i] < 'Z'))  //错误点3:统计字母包含a、z和A、Z,应该是 >= 和 <=
            a++;
        else if(str[i] >= 0 && str[i] <= 9)   //错误点4:string类型是char类型的扩展,本质上str[i]数组中存储的是char类型,转换成数字存储的是ascii码,这样比较会出错,故应该改成'0'、'9',和字符比较
            b++;
        else if(str[i] == " ")   //错误点5:错误类型和错误点4类似,本质上是char类型,char类型使用' '单引号括起来
            c++;
        else
            d++;
    }
    cout << a << " " << b << " " << c << " " << d;
}

错误运行截图: 

正确代码

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string str;        //定义string类型的变量,记得头文件<string>
    int a=0,b=0,c=0,d=0;     //初始化定义统计值变量,a表示字母,b表示数字,c表示空格,d表示其他字符
    getline(cin,str);  //cin输入遇到空格会自动停止,因此不能使用cin输入,使用geiline函数输入
    for(unsigned int i = 0; i < str.length(); i++){    //str为string类型,本质是char类型,无标志,直接和int类型无法比较,需要设置unsigned
        //数组中存储的是ascii码,可以使用ascii码进行比较,也可以直接使用字符进行比较
        if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
            a++;
        else if(str[i] >= '0' && str[i] <= '9')
            b++;
        else if(str[i] == ' ')
            c++;
        else
            d++;
    }
    cout << a << " " << b << " " << c << " " << d;
}

五、运行结果

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Saulstone

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

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

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

打赏作者

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

抵扣说明:

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

余额充值