统计数字字符个数
题目描述
输入一行字符,统计出其中数字字符的个数。
输入格式
一行字符串,总长度不超过 255 255 255。
输出格式
输出为 1 1 1 行,输出字符串里面数字字符的个数。
样例 #1
样例输入 #1
Today is 2021-03-27
样例输出 #1
8
方法1
解题思路:
本题要求统计给定字符串中数字字符的个数。我们可以遍历字符串的每个字符,判断其是否为数字字符,如果是则计数器加一。具体步骤如下:
-
初始化一个计数器
count
,用于统计数字字符的个数,初始值为 0 0 0。 -
遍历字符串的每个字符
c
。 -
对于每个字符
c
,判断它是否为数字字符:- 如果
c
的 ASCII 码在 48 到 57 之间(即数字字符 ‘0’ 到 ‘9’),则将计数器count
加 1 1 1。 - 否则,不做任何操作。
- 如果
-
遍历完整个字符串后,计数器
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;
}
代码解释:
-
定义了一个函数
countDigits
,用于统计字符串中数字字符的个数。函数接受一个字符串s
作为参数,返回数字字符的个数。 -
在
countDigits
函数中,定义了一个计数器变量count
,初始值为 0 0 0,用于统计数字字符的个数。 -
使用基于范围的
for
循环遍历字符串s
的每个字符c
。 -
对于每个字符
c
,使用条件语句判断它是否为数字字符:- 如果
c
的 ASCII 码在 48 到 57 之间(即数字字符 ‘0’ 到 ‘9’),则将计数器count
加 1 1 1。 - 否则,不做任何操作。
- 如果
-
循环结束后,
count
的值即为数字字符的个数。 -
函数返回
count
。 -
在
main
函数中,使用getline
函数读取一行输入,即待统计的字符串,并将其存储在变量s
中。 -
调用
countDigits
函数,将字符串s
作为参数传入,得到数字字符的个数,并将结果存储在变量result
中。 -
输出
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;
}
代码解释:
-
在
countDigits
函数中,我们定义了一个计数器变量count
,初始值为 0 0 0,用于统计数字字符的个数。 -
使用基于范围的
for
循环遍历字符串s
的每个字符c
。 -
对于每个字符
c
,使用isdigit
函数判断它是否为数字字符:- 如果
isdigit(c)
为真(即c
是数字字符),则将计数器count
加 1 1 1。 - 否则,不做任何操作。
- 如果
-
循环结束后,
count
的值即为数字字符的个数。 -
函数返回
count
。 -
在
main
函数中,使用getline
函数读取一行输入,即待统计的字符串,并将其存储在变量s
中。 -
调用
countDigits
函数,将字符串s
作为参数传入,得到数字字符的个数,并将结果存储在变量result
中。 -
输出
result
,即为数字字符的个数。
复杂度分析:
- 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串的长度。我们需要遍历字符串的每个字符,对每个字符进行常数时间的判断操作。
- 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数个变量,空间复杂度为常数。
这种方法与方法一类似,但是使用了 isdigit
函数来判断字符是否为数字字符,而不是直接比较 ASCII 码。isdigit
函数是 C++ 标准库中的一个函数,用于判断字符是否为十进制数字字符。它在 <cctype>
头文件中定义。
使用 isdigit
函数可以使代码更加简洁和可读,同时也提高了代码的可移植性,因为不同的字符编码可能会影响直接比较 ASCII 码的方式。