Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

只需要考虑正负号,小数点,指数e符号,数字四种可能,除了它们之外的字符,程序返回false。

  • 正负号:只能出现在第一个字符或者e后面,不能出现在最后一个字符
  • 小数点:字符串不能只含有小数点,也不能只含正负号和小数点,小数点不能在e或者小数点后
  • e:e不能出现在第一个字符,也不能出现在最后一个字符,e前面不能没有数字,也不能有e
class Solution {
public:
bool isVaild(char c){
if(c=='+' || c=='-' || c == '.' || c=='e' || c>=''&& c <= '') return true;
else return false; } bool isNumber(const char *s) {
string str(s);
bool res = false;
size_t pos = str.find_first_not_of(" ");
if(pos!=string::npos) str=str.substr(pos); //去掉前端空格
else str="";
pos = str.find_last_not_of(" ");
str=str.substr(,pos+); //去掉后端空格
if(str == "") return res;
bool hasSign = false, hasDot = false, hasExp = false, hasDigit = false;
int len = str.length();
for(int i = ; i < len ;++ i){
char ch = str[i];
if(!isVaild(ch)) return false;
switch(ch){
case '+':
case '-':
//不在第一个或者e后面;在最后一个字符
if((i!= && str[i-]!='e') || i== len-) return false;
else hasSign = true;
break;
case '.':
//只有一个字符的情况;只有符号和点;在e和点之后
if(len == || (len == && hasSign) || hasExp || hasDot) return false;
else hasDot = true;
break;
case 'e':
//出现在第一个或最后一个;前面没有数字;前面有e
if(i == || i == len- || !hasDigit || hasExp) return false;
else hasExp = true;
break;
default:
hasDigit = true;
break;
}
}
return true;
}
};

最新文章

  1. phpRedis安装、配置及简单使用
  2. if语句的一个小技巧
  3. (转)Silverlight控件关系理解
  4. 函数return/获取元素样式/封装自己的库
  5. SAM4E单片机之旅——19、CAN间通信
  6. THE ONE THING PEOPLE WILL MASSIVELY OVERPAY FOR (有一个东西人们是愿意出高价购买的)
  7. Nginx启动报错:10013: An attempt was made to access a socket in a way forbidden
  8. java class生成jar包(转)
  9. 真&#183;浅谈treap树
  10. Windows2003系统如何设置能让两个人共用一个桌面同时远程控制?
  11. Flutter - 创建底部导航栏
  12. java解压缩.gz .zip .tar.gz等格式的压缩包方法总结
  13. Android平台下OpenGL图形编程
  14. Mac下使用crontab来实现定时任务
  15. 三:SpringCloud-Ribbon
  16. chromium 安裝 flash
  17. 【题解】洛谷P4180 [BJWC2010] 严格次小生成树(最小生成树+倍增求LCA)
  18. win10网速慢
  19. 常见协议基础知识总结--DHCP协议
  20. 见微知著(三):解析ctf中的pwn--Fastbin和bins的溢出

热门文章

  1. 烂泥:nginx、php-fpm、mysql用户权限解析
  2. 作为一名前端er,从武汉来到深圳三个月有感
  3. JDBC ODBC区别
  4. PHP用curl伪造IP和来源
  5. 【PHP升级】CentOS6.3编译安装 PHP5.4.38
  6. linux内核调度算法(2)--CPU时间片如何分配 转!
  7. Redis Cluster搭建方法简介22211111
  8. espcms简约版的表单,提示页,搜索列表页
  9. poj 3038
  10. RobotFrameWork(三)数据类型