返回题解分享
讨论 / 题解分享/ 帖子详情

分类计数(编程题) - 题解

#include<iostream>

using namespace std;

int main()
{
	string s;
	cin>>s;
	int sm=0,b=0,d=0;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]>='a'&&s[i]<='z') sm++;
		if(s[i]>='A'&&s[i]<='Z') b++;
		if(s[i]>='0'&&s[i]<='9') d++;
	}
	cout<<b<<endl<<sm<<endl<<d;
}
4 回复 0 转发 0 喜欢 493 阅读
回复 (4)
默认 最新
露米 2026/4/30
看到你在练习字符串的基础处理,这种一步步构建逻辑的过程非常扎实 🙂

除了前面聊到的输入方式和内置函数,你也可以试着观察一下:如果我们要统计的字符种类变多了(比如还要增加统计空格或标点符号),现在的 if 语句块会不会变得有点长?

这时候,可以尝试挑战一下“排除法”——如果一个字符既不是字母也不是数字,那它可能就是我们要找的“其他字符”。你可以试着在循环里加一个 else 分支来捕捉它们,看看逻辑上会有什么
变化。这样不仅能让代码处理的情况更全面,也能帮你更好地理解逻辑嵌套。

编程就是这样一个不断优化和扩展的过程。如果你在尝试过程中遇到了新的挑战,或者发现了更巧妙的写法,随时都可以发出来分享。

接下来你打算尝试增加更多种类的统计,还是先优化现有的结构呢?我会一直在这里陪着你 🙂
0
露米 2026/3/25
代码逻辑写得很清晰,变量命名也很直观,读起来很顺畅 🙂

有一个小细节想和你交流一下:目前的 cin >> s 在遇到空格时会停止读取。如果题目给出的字符串里包含了空格,统计结果可能会和预期有一点点出入。

或许可以尝试一下 getline(cin, s)?这样就能把整行内容都完整地接住啦。

另外,如果你之后想尝试更简洁的写法,也可以了解一下 <cctype> 头文件里的 isupperislowerisdigit 这些小函数。它们能帮你省去手动判断 ASCII 范围的步骤,让代码看起来更清爽一点。

你可以根据题目的具体要求再微调看看。如果在尝试新函数时有任何有趣的发现,也欢迎继续在帖子里分享,大家可以一起讨论进步 🙂
对了,代码里虽然用了 string 类型,但为了更规范一些,建议也带上 #include <string> 这个头文件。虽然有些编译器会自动包含,但手动加上会让代码的兼容性更好,也更稳妥。

你最近是在练习这类基础逻辑吗?如果之后遇到需要统计“其他字符”(比如空格或标点)的情况,也可以试着挑战一下,看看逻辑上会有什么变化。加油,我会一直在这里支持你的 🙂
0
露米 2026/3/4
代码逻辑写得很清晰,变量命名也很直观,读起来很舒服 🙂

有一个小细节想和你交流一下:现在的 cin >> s 在遇到空格时会停止读取。如果题目给出的字符串里包含了空格,结果可能会和预期有一点点出入。

或许可以尝试一下 getline(cin, s)?这样就能把整行内容都完整地接住啦。

另外,如果你之后想尝试更简洁的写法,也可以了解一下 isupperislowerisdigit 这些小函数,它们能帮你
省去手动判断范围的步骤,让代码看起来更简洁。

你可以根据题目的具体要求再微调看看。如果在尝试新函数时有任何有趣的发现,也欢迎继续在帖子里分享,大家可以一起讨论进步 🙂
0
露米 2026/2/20
代码逻辑写得很清晰,变量命名也很直观,读起来很舒服 🙂

有一个小细节想和你交流一下:现在的 cin >> s 在遇到空格时会停止读取。如果题目给出的字符串里包含了空格,结果可能会和预期有一点点出入。

或许可以尝试一下 getline(cin, s)?这样就能把整行内容都完整地接住啦。

你可以根据题目的输入要求再微调一下,如果有其他发现也欢迎分享出来。加油~
另外,如果你之后想尝试更简洁的写法,也可以了解一下 isupperislower 这些小函数,它们能帮你省去手动判断范围的步骤。

在学习过程中有任何新发现,都欢迎继续在帖子里分享,大家可以一起讨论进步 🙂
0