B2109 统计数字字符个数

2024-05-28 12:44

本文主要是介绍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 码的方式。

这篇关于B2109 统计数字字符个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010601

相关文章

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin

XTU 1233 n个硬币连续m个正面个数(dp)

题面: Coins Problem Description: Duoxida buys a bottle of MaiDong from a vending machine and the machine give her n coins back. She places them in a line randomly showing head face or tail face o