[刷题]入门5.统计数字字符个数
1、题目
2、基础
- 字符数组
fgets
函数,需要的头文件是<cstdio>
isdigit
函数,需要的头文件是<cctype>
#include <cstdio>
// gets存在安全性问题,C++11中取消了gets,给出了更加安全的方案fgets。
char * gets (char * str);
char * fgets (char * str, int num, FILE * stream);
gets
和fgets
的区别:
gets
是从第一个字符开始读取,一直读取到\n
停止,但是不会读取\n
,也就是读取到的内容中没有包含\n
,但是会在读取到的内容后自动加上\0
。fgets
也是从第一个字符开始读取,最多读取num-1
个字符,最后一个位置留给\0
,如果num
的长度是远大于输入的字符串长度,就会一直读取到\n
停止,并且会读取\n
,将\n
作为读取到内容的一部分,同时在读取到的内容后自动加上\0
。
3、思路
观察,可知:
- 要确保读取完整的字符串,包括空格。
- 要写出判定数字字符的思路。
于是,题目这样解:
第一次:
- 在第一次编写程序时,我的思路是采用
fgets
读取一行字符串,直到遇到换行符\n
为止。然后,在循环过程中逐个检查字符串中的每个字符,判断它们是否为数字字符。
#include <iostream>
using namespace std;
const int N = 265;
char arr[N];
int main()
{
// 会一直读取到\n,会将\n读取放入数组,末尾还会放上\0
fgets(arr, N, stdin);
int count = 0;
int i = 0;
while (arr[i] != '\n')
{
if (arr[i] >= '0' && arr[i] <= '9')
count++;
i++;
}
cout << count << endl;
return 0;
}
第二次:
- 在第二次编程时,我利用
scanf
函数的"%[^\n]"
格式串来读取一整行字符串,该格式会持续读取字符直至遇到换行符\n
(换行符本身不会被读取),并自动在字符串末尾添加空字符\0
作为结束标志。随后,遍历该字符串,直至遇到结束符\0
。
#include <iostream>
using namespace std;
const int N = 265;
char arr[N];
int main()
{
// 不会读取\n,也会在末尾放上\0
scanf("%[^\n]s", arr);
int count = 0;
int i = 0;
while (arr[i] != '\0')
{
if (arr[i] >= '0' && arr[i] <= '9')
count++;
i++;
}
cout << count << endl;
return 0;
}
第三次:
- 在第三次编程时,采用了
isdigit
函数来优化数字判断的逻辑。
#include <iostream>
#include <cctype>
using namespace std;
const int N = 265;
char arr[N];
int main()
{
// 不会读取\n,也会在末尾放上\0
scanf("%[^\n]s", arr);
int count = 0;
int i = 0;
while (arr[i] != '\0')
{
if (isdigit(arr[i]))
count++;
i++;
}
cout << count << endl;
return 0;
}
4、结果
完。
原文地址:https://blog.csdn.net/m0_71486972/article/details/143912467
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!