B2109 统计数字字符个数
#include <iostream>
using namespace std;
# include <string.h>
#include <ctype.h>
#include <algorithm>
int main(){
char str[256];
cin.getline(str,256);
//fgets(str,256,stdin);
int cnt = 0;
//for(size_t i = 0;i< sizeof(str);i++){
for(size_t i = 0;i< strlen(str);i++){
cnt +=isdigit(str[i]);
}
cout<<cnt;
}/*`sizeof` 和 `strlen` 在 C++ 中的确存在显著的区别。虽然 `sizeof` 的结果看似有时是个数,但它实际返回的是“字节长度”,而不是元素的数量,尤其在数组和字符串的场景中。以下是详细的解释:
### 1. **`sizeof` 的作用**
- **返回值**:`sizeof` 返回的是变量或类型在内存中占用的字节数。
- **作用对象**:可以用于任意数据类型(如基本数据类型、数组、结构体、类等)。
- **适用范围**:`sizeof` 是在编译时计算的,所以它的结果在编译期已知。
#### 示例
```cpp
int arr[10];
std::cout << sizeof(arr); // 输出 40(假设 int 是 4 字节)
```
这里 `sizeof(arr)` 的结果是 `40` 字节,因为数组 `arr` 包含 10 个 `int` 元素,而每个 `int` 占用 4 字节。因此 `sizeof(arr)` 返回 `10 * 4 = 40` 字节。
> 注意:对于数组,`sizeof` 返回的是数组的总字节数,并不是元素的个数(除非手动除以单个元素的大小)。在字符串场景中,`sizeof` 会包括字符串末尾的 `\0`。
#### 对字符串的影响
```cpp
char str[256];
std::cout << sizeof(str); // 输出 256
```
对于 `char str[256]`,`sizeof(str)` 返回的是整个字符数组的字节长度 `256`,而不是字符串的实际长度。这意味着即使字符串的内容长度是 10,`sizeof(str)` 依然返回 256,因为 `str` 的总空间大小是 256 字节。
### 2. **`strlen` 的作用**
- **返回值**:`strlen` 返回的是字符串的实际字符数(不包括末尾的 `\0`)。
- **作用对象**:仅用于 `char` 类型的字符串(C 风格字符串),且必须是以 `\0` 结尾。
- **适用范围**:`strlen` 是一个函数,它通过遍历字符串来确定字符个数,因此它的计算是在运行时进行的。
#### 示例
```cpp
char str[] = "Hello";
std::cout << strlen(str); // 输出 5
```
在这个例子中,`str` 实际包含的字符是 `H`, `e`, `l`, `l`, `o`,共 5 个字符,所以 `strlen(str)` 返回 `5`。这里不包括字符串末尾自动添加的 `\0`。
### 总结
- **`sizeof`**:返回的是变量或类型的总字节数,在数组中返回的是数组的全部内存大小(包括未使用的部分)。
- **`strlen`**:仅适用于 C 风格字符串,返回实际字符串内容的字符数,不包括终止符 `\0`。
所以,`sizeof` 返回的不是元素个数,而是总字节长度,而 `strlen` 返回的是字符串中实际字符的个数。*/