• 【正则表达式】表示数值的字符串


    【题目1】统计一个文本文件中出现的整数的平均值。整数是满足模式[+|-]D*的串,其中D=0|1|2|3|4|5|6|7|8|

    这是一道c++编程题 ,[+|-]D*串,其中D=0|1|2|3|4|5|6|7|8|。

    这是正则表达式,[+-]表示的是匹配[]中的字符集
    d表示匹配一个0-9之间的数字,最后一个*表示d的匹配次数为不限制匹配次数
    我觉得最好用 [+-]?d+ 这个正则表达式

    题目分析:https://zhidao.baidu.com/question/564371629.html

    思路1:https://zhidao.baidu.com/question/167472686.html

    思路2:https://www.cnblogs.com/AndyJee/p/4700611.html

    自己思路:输入一行字符,将此字符串中最长的单词输出。 这道题有点像。

    方法1:每次查找到一个数字都把他放到一个number变量中,一个number数字完成后,马上加入到sum中。或者存放到数组,最后所有相加。

    方法2:每次查到一个数字,就记录位置,一个number数字完成后,用字符串转换成数字的方法(递归等),变成一个number,加入到sum中。

    主要注意三种状态:新发现一个字符c是’0‘~’9‘数字字符,一个字符c在一个数字中,一个字符c没有在一个数字中。

    c语言

    #include <stdio.h>
    #include <stdlib.h>
    
    void getNum(void);
    int isNum(char c);
    
    int main(void)
    {
        getNum();
        return 0;
    }
    
    void getNum(void)
    {
        FILE *fp;
        int numc = 0, number = 0, sum = 0, count = 0, flag = 1;
        char c;
        float aver = 0.0;
        if((fp = fopen("num.txt", "rb")) == NULL)
        {
            printf("Cannot open this file.
    ");
            exit(0);
        }
    
        while(!feof(fp))
        {
            c = fgetc(fp);
        //    printf("c = %c
    ", c);
            if(1 == isNum(c)) // is a num
            {
                if(1 == flag) //start a new number
                {
                    count++;
                    numc = c - '0';
                    sum = sum + number;
                    printf("num%d: %d
    ", count, number);
                    number = numc;
                    flag = 0;
                }
                else    // in a num
                {
                    numc = c - '0';
                    number = number * 10 + numc;
                }
            }
            else    // not in a num
            {
                flag = 1; // ready to start a new number
            }
            if((feof(fp)))
            {
                count++; 
                sum = sum + number;
                printf("last num%d: %d
    ", count, number);
            }
        }
        count--; // count 在第一次计数的时候多算了一个
        printf("
    ");
        aver = sum / count;
        printf("%f
    ", aver);
        fclose(fp);
    }
    int isNum(char c)
    {
        if(c <= '9' && c >= '0')
            return 1;
        else
            return 0;
    }

    还未识别+ -号,

    测试文本:

    sfsf123kjksfds-123sfsdfsf1 sfsdfsf2sdfsff32sfdfdsf41f10101ss

    测试结果:

    farmer@paprikatree:~/exam/07$ gcc 1.c -o 1
    farmer@paprikatree:~/exam/07$ ./1
    num1: 0
    num2: 123
    num3: 123
    num4: 1
    num5: 2
    num6: 32
    num7: 41
    last num8: 10101
    
    1489.000000
  • 相关阅读:
    Ucloud的自主研发的检测主机是否被入侵的agent
    logstash 中多行合并
    python yield的解释
    influxdb 配置文件注释
    supervisor 完整安装步骤
    Linux创建系统用户
    kafka 集群的部署安装
    shell 计算时间差
    phantomjs 的安装部署
    yarn 的安装
  • 原文地址:https://www.cnblogs.com/paprikatree/p/10459712.html
Copyright © 2020-2023  润新知