统计数字字符个数

GitHub跳转原题关系图返回列表

用 fgets 按 255 字符缓冲区整行读入,单遍扫描统计 ASCII 数字字符个数。

OJ: roj

题目 ID: 1129

难度:入门

标签:字符串输入输出python

创建: 2026-09-29 20:16

更新: 2026-10-05 02:53

题目描述

输入一行字符串,字符集含大小写字母、数字、空格与英文标点,长度不超过 255。统计其中 '0' 到 '9' 字符的个数并输出。

思路

整行读入后只统计前 255 个字符,从左到右扫描,遇到 ASCII 数字字符就计数。缓冲区大小为 256 字节时实际最多保存 255 个可见字符,与官方参考实现的读取语义一致。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 20:16
# update_at: 2026-09-29 20:16

import sys

MAX_LEN = 255  # 题面保证字符串总长度不超过 255,超长部分按 std.cpp 的缓冲区规则不参与统计


def solve() -> None:
    line = sys.stdin.buffer.read().decode()  # 一整行输入:字母、数字、空格与标点混合

    # 只保留前 255 个字符,再数其中落在 '0'~'9' 的字符;str.isdigit() 会把上标等
    # 非 ASCII 数字也算进来,故显式比较区间。
    kept = line[:MAX_LEN]
    count = sum('0' <= ch <= '9' for ch in kept)
    print(count)


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2025-01-20 21:30
 * update_at: 2026-10-05 02:53
 */
#include <cstdio>
#include <cstring>
using namespace std;

typedef long long ll;

char s[260]; // 读入缓冲区,fgets 最多保留 255 个可见字符

int main() {
    // 用 fgets 模拟官方参考实现:缓冲区 256 字节(含 '\0'),最多读入 255 个字符
    if (fgets(s, 256, stdin) == NULL) {
        printf("0\n");
        return 0;
    }

    ll ans = 0;
    ll len = strlen(s);
    for (ll i = 0; i < len; i++) {
        if (s[i] >= '0' && s[i] <= '9') ans++;
    }
    printf("%lld\n", ans);
    return 0;
}