自学内容网 自学内容网

[刷题]入门5.统计数字字符个数



1、题目

链接:洛谷-B2109-统计数字字符个数在这里插入图片描述

2、基础

  • 字符数组
  • fgets函数,需要的头文件是<cstdio>
  • isdigit函数,需要的头文件是<cctype>
#include <cstdio>
// gets存在安全性问题,C++11中取消了gets,给出了更加安全的方案fgets。
char * gets (char * str);
char * fgets (char * str, int num, FILE * stream);

getsfgets的区别:

  • 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)!