【C/C++练习题】表示数值的字符串
【摘要】
《剑指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 代码
-
#include "iostream"
-
#include <cstdio>
-
-
using namespace std;
-
-
//问题:判断字符串为表示数值的字符串
-
//整数部分[.小数部分[e/E指数部分]]
-
bool Is_number(char* str);
-
bool Is_unsigned_int(char** str);
-
bool Is_int(char** str);
-
-
//测试函数
-
void test01()
-
{
-
char test01[] = "3.14";
-
cout << "\"3.14\" is " << Is_number(test01) << endl;
-
-
char test02[] = "3.14e11";
-
cout << "\"3.14e11\" is " << Is_number(test02) << endl;
-
-
char test03[] = "+3.14e-11";
-
cout << "\"+3.14e-11\" is " << Is_number(test03) << endl;
-
-
char test04[] = "3.14a11";
-
cout << "\"3.14a11\" is " << Is_number(test04) << endl;
-
}
-
-
-
int main(int argc, char const *argv[])
-
{
-
test01();
-
return 0;
-
}
-
-
-
-
//功能:判断字符串表示数值
-
//输入:str 源字符串首地址
-
//返回:true 成功, false 失败
-
bool Is_number(char* str)
-
{
-
//1.参数的合法性
-
if (NULL == str)
-
return false;
-
-
//2.判断整数部分
-
bool is_number = Is_int(&str);
-
-
//3.判断小数部分
-
if (*str == '.')
-
{
-
++str;
-
//3.14 or 3.(0) or (0).14
-
is_number = Is_unsigned_int(&str) || is_number;
-
}
-
-
//4.判断指数部分
-
if (*str == 'E' || *str == 'e')
-
{
-
++str;
-
//e前面必须有数值
-
is_number = Is_int(&str) && is_number;
-
}
-
-
//5.返回结果
-
return (*str == '\0' && is_number);
-
}
-
-
//功能:判断字符串表示整数(不带符号)
-
//输入:str 起始地址
-
//返回:true 成功, false 失败
-
bool Is_unsigned_int(char** str)
-
{
-
const char* before = *str; //保存首地址
-
-
while ( **str != '\0' && **str >= '0' && **str <= '9' )
-
{
-
-
(*str)++;
-
}
-
-
return *str > before;
-
}
-
-
-
//功能:判断字符串表示整数(带符号)
-
//输入:str 起始地址
-
//返回:true 成功, false 失败
-
bool Is_int(char** str)
-
{
-
if (**str == '+' || **str == '-')
-
{
-
(*str)++;
-
}
-
return Is_unsigned_int(str);
-
}
4 运行结果
文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/feit2417/article/details/98615211
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)