文章目录

  • 题目分析
  • 题目来源

题目分析



来源:acwing

分析:
C++中有函数stoi表示把string 变成int,还有函数stof,表示把string变成float。如果是合法数字的话,stof就将其变成数,不是合法数字的话,会抛出异常。

size_t idx; //这里是类型size_t,不是int
stof(s,&idx); //idx存的是用到字符串s中几个字符,如果全用到, 则是idx==s.size()

stof的英文释义如下:读者可以参阅。

float       stof( const std::string& str, std::size_t* pos = 0 );
#功能
Function discards any whitespace characters (as determined by
std::isspace()) until first non-whitespace character is found.
Then it takes as many characters as possible
to form a valid floating-point representation
and converts them to a floating-point value.
#Parameters:两个参数
str -   the string to convert
pos -   address of an integer to store the number of characters processed
#Return value:返回值
The string converted to the specified floating point type.#Exceptions:抛出异常
std::invalid_argument if no conversion could be performedstd::out_of_range if the converted value would fall out of the range of the result type or if the underlying function (strtof, strtod or strtold) sets errno to ERANGE.

所以需要用try{}和catch{}来捕获异常。

判断字符串是否是浮点数的写法
//3.13abc这样的数也会转成double,不过存的是3.13,用到的字符个数idx =4,后面的abc会被抛弃。所以x =3.13.

        double x;bool success = true; try{size_t idx; //用了几个字符x =stof(s,&idx); if(idx < s.size()) success = false;}//任何类型的异常:用...表示//如果有异常,就执行下面的语句catch(...){success = false;}

AC代码

#include<bits/stdc++.h>
using namespace std;const int N =1010;int main(){int n;cin >>n ;int cnt = 0;double sum = 0;while(n--){string s;cin >> s;double x;bool success = true;try{size_t idx; //用了几个字符x =stof(s,&idx);if(idx < s.size()) success = false;}//任何类型的异常:用...表示//如果有异常,就执行下面的语句catch(...){success = false;}if( x< -1000 || x > 1000) success  =false;int k = s.find(".");//不是两位小数if(k!= -1 && s.size()-1-k>2) success = false;if(success) cnt++, sum += x;else  printf("ERROR: %s is not a legal number\n",s.c_str());}if(cnt>1) printf("The average of %d numbers is %.2lf\n",cnt, sum/cnt);else if(cnt == 1) printf("The average of %d number is %.2lf\n",cnt, sum);else cout<<"The average of 0 numbers is Undefined";
}

题目来源

PAT甲级1108 Finding Average

PAT甲级1108 Finding Average :[C++题解]stof、字符串变成浮点数、try和catch捕获异常、C++语法题相关推荐

  1. PAT 甲级 1108 Finding Average (20 分)

    思路: 1.不是数字的位置只能在第一个且为负号,或者在字符串的倒数第一.二.三位置.或者不存在: 2.上面的方法也可以用sscanf或者sprintf进行判定: 3.数字要在规定区间内: 4.按.2f ...

  2. PAT甲级1145 Hashing - Average Search Time:[C++题解]哈希表、哈希表开放寻址法、二次探测法、求平均查找次数

    文章目录 题目分析 题目链接 题目分析 来源:acwing 本题的分析见另一道PAT的题目:PAT甲级1078 Hashing:[C++题解]哈希表.哈希表开放寻址法.二次探测法链接的题目就是让建立h ...

  3. PAT甲级1029 Median:[C++题解]贪心、二路归并

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 如果直接排序,时间复杂度是O(nlogn),n=2∗105O(nlogn),\ n=2*10^5O(nlogn), n=2∗105会 ...

  4. PAT甲级1070 Mooncake:[C++题解]贪心

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 对单件从高到低排序. 需要注意的是总需要量d设成double,不要设成int. ac代码 #include<bits/stdc ...

  5. PAT甲级1008 Elevator:[C++题解]模拟

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:统计上升次数.下降次数:停留次数就是n.然后算数即可. ac代码 #include<bits/stdc++.h> usin ...

  6. PAT甲级1077 Kuchiguse:[C++题解]字符串、最长公共后缀

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 读入n个字符串s[n],以s[0]为基础找公共后缀.枚举后缀的长度,内层循环遍历其他字符串,判断是否后缀相等. 使用子串的函数sub ...

  7. PAT甲级1078 Hashing:[C++题解]哈希表、哈希表开放寻址法、二次探测法

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 本题建立hash表是利用只具有正增量的二次探测法来解决冲突, 索引 = 数 % 哈希表的大小 如果映射到同一个索引idx,hash表 ...

  8. PAT甲级1003 Emergency:[C++题解]dijkstra求最短路、最短路条数

    文章目录 题目分析 题目链接 题目分析 分析:求单源最短路,使用dijkstra()算法. 最短路的条数,和最短路中 人数最多的一条,输出最多人数. 本题点比较少,使用邻接矩阵d[N][N]来存. a ...

  9. PAT甲级1032 Sharing :[C++题解]链表

    文章目录 题目分析 题目链接 题目分析 思路:建立链表,这里使用数组.e [ ] 表示当前的数值,ne[ ]表示next指针. 求单词的公共后缀,就是求两个链表从头结点开始第一个公共的结点. 先遍历第 ...

最新文章

  1. 今天浏览新闻的时候,发现一张图片特别有感触
  2. Navicat连接Oracle数据库以及Oracle library is not loaded的解决方法
  3. 【四重优化,速看】剑指 Offer 13. 机器人的运动范围
  4. vim的简单使用及配置
  5. HDU2043 密码【密码】
  6. 代码之美~利用构造方法实现模块的解耦
  7. 数据可视化软件有什么特点
  8. 苹果电脑取色器怎么用?Mac取色器——为你的设计提提速
  9. 常见通信RF指标的内在和意义
  10. 纸鸢|物联网云平台小工具集合常见 MQTT 客户端比较
  11. 抽奖软件NABCD分析
  12. Codeforces-936B Sleepy Game
  13. QPython 3C 操作 压缩包
  14. 还在为阅读量苦恼么?文章提升10倍曝光的写作技巧
  15. python定义一个人类_Python类和人类
  16. NOJ 1116 哈罗哈的大披萨 【淡蓝】 状态压缩DP
  17. 中国城市码cityCode映射
  18. 如何改变图片的大小kb
  19. Simulink---Extrinsic函数绘图
  20. 微软裁员方式曝光:鼓励自愿退休 减少合同工

热门文章

  1. android加载html
  2. 哪位有方法把 dd/mm/yyyy的字符串 格式化成yyyy-mm-dd
  3. C++标准:C++不允许修改任何基本型别(包括指针)的暂时值
  4. python列表get方法_python的get set方法示例
  5. 双层lstm每层有自己的权重参数吗_一幅图真正理解LSTM的物理结构
  6. 基于mqtt协议的消息推送服务器,基于 MQTT 协议的推送服务
  7. j3455跑mysql_自用NAS升级折腾小记+J3455开硬件直通
  8. 研究生的早期科研之路
  9. 2.4 嵌入矩阵-深度学习第五课《序列模型》-Stanford吴恩达教授
  10. Buffer Status Report(BSR)