B2109 统计数字字符个数

统计数字字符个数

题目描述

输入一行字符,统计出其中数字字符的个数。

输入格式

一行字符串,总长度不超过 255 255 255

输出格式

输出为 1 1 1 行,输出字符串里面数字字符的个数。

样例 #1

样例输入 #1

Today is 2021-03-27

样例输出 #1

8

方法1

解题思路:

本题要求统计给定字符串中数字字符的个数。我们可以遍历字符串的每个字符,判断其是否为数字字符,如果是则计数器加一。具体步骤如下:

  1. 初始化一个计数器 count,用于统计数字字符的个数,初始值为 0 0 0

  2. 遍历字符串的每个字符 c

  3. 对于每个字符 c,判断它是否为数字字符:

    • 如果 c 的 ASCII 码在 48 到 57 之间(即数字字符 ‘0’ 到 ‘9’),则将计数器 count 1 1 1
    • 否则,不做任何操作。
  4. 遍历完整个字符串后,计数器 count 的值即为数字字符的个数。

C++代码实现:

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

int countDigits(string s) {
    int count = 0;
    for (char c : s) {
        if (c >= '0' && c <= '9') {
            count++;
        }
    }
    return count;
}

int main() {
    string s;
    getline(cin, s);
    
    int result = countDigits(s);
    
    cout << result << endl;
    
    return 0;
}

代码解释:

  1. 定义了一个函数 countDigits,用于统计字符串中数字字符的个数。函数接受一个字符串 s 作为参数,返回数字字符的个数。

  2. countDigits 函数中,定义了一个计数器变量 count,初始值为 0 0 0,用于统计数字字符的个数。

  3. 使用基于范围的 for 循环遍历字符串 s 的每个字符 c

  4. 对于每个字符 c,使用条件语句判断它是否为数字字符:

    • 如果 c 的 ASCII 码在 48 到 57 之间(即数字字符 ‘0’ 到 ‘9’),则将计数器 count 1 1 1
    • 否则,不做任何操作。
  5. 循环结束后,count 的值即为数字字符的个数。

  6. 函数返回 count

  7. main 函数中,使用 getline 函数读取一行输入,即待统计的字符串,并将其存储在变量 s 中。

  8. 调用 countDigits 函数,将字符串 s 作为参数传入,得到数字字符的个数,并将结果存储在变量 result 中。

  9. 输出 result,即为数字字符的个数。

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串的长度。我们需要遍历字符串的每个字符,对每个字符进行常数时间的判断操作。
  • 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数个变量,空间复杂度为常数。

该解决方案的关键是判断每个字符是否为数字字符,可以根据字符的 ASCII 码范围来进行判断。通过遍历字符串的每个字符,我们可以统计数字字符的个数,最终得到结果。

方法2

C++代码实现:

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

int countDigits(string s) {
    int count = 0;
    for (char c : s) {
        if (isdigit(c)) {
            count++;
        }
    }
    return count;
}

int main() {
    string s;
    getline(cin, s);
    
    int result = countDigits(s);
    
    cout << result << endl;
    
    return 0;
}

代码解释:

  1. countDigits 函数中,我们定义了一个计数器变量 count,初始值为 0 0 0,用于统计数字字符的个数。

  2. 使用基于范围的 for 循环遍历字符串 s 的每个字符 c

  3. 对于每个字符 c,使用 isdigit 函数判断它是否为数字字符:

    • 如果 isdigit(c) 为真(即 c 是数字字符),则将计数器 count 1 1 1
    • 否则,不做任何操作。
  4. 循环结束后,count 的值即为数字字符的个数。

  5. 函数返回 count

  6. main 函数中,使用 getline 函数读取一行输入,即待统计的字符串,并将其存储在变量 s 中。

  7. 调用 countDigits 函数,将字符串 s 作为参数传入,得到数字字符的个数,并将结果存储在变量 result 中。

  8. 输出 result,即为数字字符的个数。

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串的长度。我们需要遍历字符串的每个字符,对每个字符进行常数时间的判断操作。
  • 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数个变量,空间复杂度为常数。

这种方法与方法一类似,但是使用了 isdigit 函数来判断字符是否为数字字符,而不是直接比较 ASCII 码。isdigit 函数是 C++ 标准库中的一个函数,用于判断字符是否为十进制数字字符。它在 <cctype> 头文件中定义。

使用 isdigit 函数可以使代码更加简洁和可读,同时也提高了代码的可移植性,因为不同的字符编码可能会影响直接比较 ASCII 码的方式。

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天秀信奥编程培训

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

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

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

打赏作者

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

抵扣说明:

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

余额充值