【C/C++练习题】表示数值的字符串

举报
王建峰 发表于 2021/11/19 02:17:36 2021/11/19
【摘要】 《剑指Offer》面试题20:表示数值的字符串 1 题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是   2 分析 ...

《剑指Offer》面试题20:表示数值的字符串


1 题目

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是

 

2 分析

表示数值的字符格式 A[.B[e|EC]],其中A表示整数部分、B表示小数部分、C表示指数部分。AC为带符号的整数,可以有'-'or'+'作为前缀,B为无符号整数。ABC之间有小数点'.' 和'e'区分。

 

3 代码


  
  1. #include "iostream"
  2. #include <cstdio>
  3. using namespace std;
  4. //问题:判断字符串为表示数值的字符串
  5. //整数部分[.小数部分[e/E指数部分]]
  6. bool Is_number(char* str);
  7. bool Is_unsigned_int(char** str);
  8. bool Is_int(char** str);
  9. //测试函数
  10. void test01()
  11. {
  12. char test01[] = "3.14";
  13. cout << "\"3.14\" is " << Is_number(test01) << endl;
  14. char test02[] = "3.14e11";
  15. cout << "\"3.14e11\" is " << Is_number(test02) << endl;
  16. char test03[] = "+3.14e-11";
  17. cout << "\"+3.14e-11\" is " << Is_number(test03) << endl;
  18. char test04[] = "3.14a11";
  19. cout << "\"3.14a11\" is " << Is_number(test04) << endl;
  20. }
  21. int main(int argc, char const *argv[])
  22. {
  23. test01();
  24. return 0;
  25. }
  26. //功能:判断字符串表示数值
  27. //输入:str 源字符串首地址
  28. //返回:true 成功, false 失败
  29. bool Is_number(char* str)
  30. {
  31. //1.参数的合法性
  32. if (NULL == str)
  33. return false;
  34. //2.判断整数部分
  35. bool is_number = Is_int(&str);
  36. //3.判断小数部分
  37. if (*str == '.')
  38. {
  39. ++str;
  40. //3.14 or 3.(0) or (0).14
  41. is_number = Is_unsigned_int(&str) || is_number;
  42. }
  43. //4.判断指数部分
  44. if (*str == 'E' || *str == 'e')
  45. {
  46. ++str;
  47. //e前面必须有数值
  48. is_number = Is_int(&str) && is_number;
  49. }
  50. //5.返回结果
  51. return (*str == '\0' && is_number);
  52. }
  53. //功能:判断字符串表示整数(不带符号)
  54. //输入:str 起始地址
  55. //返回:true 成功, false 失败
  56. bool Is_unsigned_int(char** str)
  57. {
  58. const char* before = *str; //保存首地址
  59. while ( **str != '\0' && **str >= '0' && **str <= '9' )
  60. {
  61. (*str)++;
  62. }
  63. return *str > before;
  64. }
  65. //功能:判断字符串表示整数(带符号)
  66. //输入:str 起始地址
  67. //返回:true 成功, false 失败
  68. bool Is_int(char** str)
  69. {
  70. if (**str == '+' || **str == '-')
  71. {
  72. (*str)++;
  73. }
  74. return Is_unsigned_int(str);
  75. }

 

4 运行结果

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/98615211

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。