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

【题目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.\n");
        exit(0);
    }

    while(!feof(fp))
    {
        c = fgetc(fp);
    //    printf("c = %c\n", 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\n", 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\n", count, number);
        }
    }
    count--; // count 在第一次计数的时候多算了一个
    printf("\n");
    aver = sum / count;
    printf("%f\n", 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

猜你喜欢

转载自www.cnblogs.com/paprikatree/p/10459712.html