【题目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