表示数值的字符串


描述

示例

思路

  • 先判断空串的情况。
  • 遍历字符前面的空格,将下标移到第一个不是空格的位置。遍历字符串后面的空格,将长度限制在最后一个空格。若是长度小于下标,说明全是空格。
  • 剩余部分判断,开始找数字,判断是不是一个有符号的整数,优先判断符号,直到遇到非数字停止。
  • 如果有小数点,那么开始判断小数点后是不是一个无符号的整数,也是遍历直到遇到非数字为止,出现小数点的话,小数点前和小数点后的数字任意有一即可。
  • 若是出现字母e或者E,那么需要判断后面是不是一个有符号的整数,,也是遍历直到遇到非数字为止,e前后都要数字。
  • 最后检查下标是不是遍历到了刚刚限制的长度,若是没有,说明后面还有非空格,不符合要求。

代码

#include<string>
using namespace std;
class Solution {
  public:
    //遍历字符串的下标
    int index = 0;
    //有符号判断
    bool integer(string& s) {
        if (index < s.length() && (s[index] == '-' || s[index] == '+'))
            index++;
        return unsigned_integer(s);

    }
    //无符号数判断
    bool unsigned_integer(string& s) {
        int temp = index;
        while (index < s.length() && (s[index] >= '0' && s[index] <= '9'))
            index++;
        return index > temp;
    }
    bool isNumeric(string str) {
        //判断空串
        if (str.length() == 0)
            return false;
        //去除空格
        while (index < str.length() && str[index] == ' ')
            index++;
        int n = str.length() - 1;
        //去除字符串后面的空格
        while (n >= 0 && str[n] == ' ')
            n--;
        //限制的长度比下标多1
        n++;
        //全是空格
        if (n < index)
            return false;
        //判断前面的字符是否有符号的整数
        bool flag = integer(str);
        //如果有小数点
        if (index < n && str[index] == '.') {
            index++;
            //小数点后有无数字
            flag = unsigned_integer(str) || flag;

        }
        //如果有e
        if (index < n && (str[index] == 'e' || str[index] == 'E')) {
            index++;
            //后面必须全是整数
            flag = flag && integer(str);
        }
        //是否字符串遍历结束
        return flag && (index == n);

    }

};

声明:技术分享爱好者|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 表示数值的字符串


Carpe Diem and Do What I Like