一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 2568|回复: 3
收起左侧

[Leetcode] leetcode: Valid Number

[复制链接] |试试Instant~ |关注本帖
415044809 发表于 2014-10-30 09:40:55 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
https://oj.leetcode.com/problems/valid-number/
今晚编了一编。编程不好,努力提高中。
系统说:
Last executed input:                " "
我咋感觉我的代码挺对的,不会有这个bug呢?
我的代码:
  1. class Solution {
  2. public:
  3.     bool isNumber(const char *s) {
  4.         string str = s;
  5.         int start = 0;
  6.         int end = str.length() - 1;
  7.         char tmp;
  8.         
  9.         // string.trim
  10.         tmp = str.at(start);
  11.         while((start <= end) && (tmp == ' ' || tmp == '\n' || tmp == '\t' || tmp == '\r')){
  12.             start++;
  13.             tmp = str.at(start);
  14.         }   
  15.         if(start > end){
  16.             return false;
  17.         }
  18.         tmp = str.at(end);
  19.         while((start <= end) && (tmp == ' ' || tmp == '\n' || tmp == '\t' || tmp == '\r')){
  20.             end--;
  21.             tmp = str.at(end);
  22.         }   
  23.         
  24.         
  25.         if(str.at(start) == '+' || str.at(start) == '-'){
  26.             start++;
  27.         }
  28.         bool num = false; // is a digit
  29.         bool dot = false; // is a '.'
  30.         bool e = false;   // is a 'e'
  31.         
  32.         while(start <= end){
  33.             tmp = str.at(start);
  34.             if(tmp <= '9' && tmp >= '0'){
  35.                 num = true;
  36.             }
  37.             else if(tmp == '.'){
  38.                 if(dot || e){
  39.                     return false;
  40.                 }
  41.                 dot = true;
  42.             }
  43.             else if(tmp == 'e'){
  44.                 if(e || !num){
  45.                     return false;
  46.                 }
  47.                 e = true;
  48.                 num = false;
  49.             }
  50.             else if (tmp == '+' || tmp == '-') {
  51.                 if (str.at(start - 1) != 'e')
  52.                     return false;
  53.             }
  54.             else{
  55.                 return false;
  56.             }
  57.             start++;
  58.         }
  59.         return num;
  60.     }
  61. };
复制代码
求各位大神百忙之中指点一下啊!555~



fangl086 发表于 2014-10-30 10:15:27 | 显示全部楼层
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::at
Aborted
http://www.cplusplus.com/reference/string/string/at/
The function automatically checks whether pos is the valid position of a character in the string (i.e., whether pos is less than the string length), throwing an out_of_range exception if it is not.
s="", len = 0, pos超出范围了,抛出异常。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

fangl086 发表于 2014-10-30 10:16:05 | 显示全部楼层
  1. class Solution {
  2. public:
  3.         bool isNumber(const char *s) {
  4.                 int start = 0, end = strlen(s)-1;
  5.                 bool dot, e, num;
  6.                 dot = e = num = false;
  7.                 for (; start<strlen(s); start++) {
  8.                         if (s[start] != ' ') break;
  9.                 }
  10.                 for (; end>=0; end--) {
  11.                         if (s[end] != ' ') break;
  12.                 }
  13.                 if (s[start]=='+' || s[start]=='-') start++;
  14.                 if (start > end) return false;
  15.                 for (int i=start; i<=end; i++) {
  16.                         if ('0'<=s[i] && s[i]<='9') {
  17.                                 num = true;
  18.                         }
  19.                         else if (s[i]=='e' || s[i]=='E') {
  20.                                 if (e || !num || i==end) return false;
  21.                                 e = true;
  22.                         }
  23.                         else if (s[i] == '.') {
  24.                                 if (dot || e) return false;
  25.                                 if (!num && i==end) return false;
  26.                                 dot = true;       
  27.                         }
  28.                         else if (s[i]=='+' || s[i]=='-') {
  29.                                 if (i==end) return false;
  30.                                 if (s[i-1]!='e' && s[i-1]!='E') return false;
  31.                         }
  32.                         else return false;
  33.                 }
  34.                 return true;
  35.         }
  36. };
复制代码

评分

2

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 415044809 发表于 2014-10-30 10:42:49 | 显示全部楼层
fangl086 发表于 2014-10-30 10:15
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::at
Abo ...

晕,这么回事儿,太谢谢啦!以后用string.at()还得小心点。
其实那我就想写个string的trim函数,结果没写好。
太谢谢啦!!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-8 20:49

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表