问题描述 链接到标题

2042.检查句子中的数字是否递增

解题思路 链接到标题

模拟一 链接到标题

首先将字符串的首尾都加上空格,然后遍历即可,检查两次空格之间的字符串是否是数字,如果是就转化为数字;

模拟二 链接到标题

直接判断字符是否是数字,如果是数字,num = num * 10 + s[i] - '0',循环直到碰到空格

代码 链接到标题

代码一 链接到标题

class Solution {
  public:
    int mpow(int e, int x) {
        while (x--)
            e *= 10;
        return e;
    }
    int str2num(int l, int r, string &s) {
        int ans = 0;
        for (int i = l + 1; i < r; i++) {
            if (s[i] - '0' <= 9 && s[i] - '0' >= 0) {
                ans += mpow(s[i] - '0', r - i - 1);
            } else {
                return 0;
            }
        }
        return ans;
    }
    bool areNumbersAscending(string s) {
        int blank_l = 0;
        int blank_r = 0, tmp = 0;
        vector<int> numbers;
        s = " " + s + " ";
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ' ') {
                blank_l = blank_r;
                blank_r = i;
                tmp = str2num(blank_l, blank_r, s);
                if (tmp > 0)
                    numbers.push_back(tmp);
            }
        }
        for (int i = 1; i < numbers.size(); i++) {
            if (numbers[i] <= numbers[i - 1])
                return false;
        }
        return true;
    }
};

代码二 链接到标题

class Solution {
public:
    bool areNumbersAscending(string s) {
        int pre = 0, pos = 0;
        while (pos < s.size()) {
            if (isdigit(s[pos])) {
                int cur = 0;
                while (pos < s.size() && isdigit(s[pos])) {
                    cur = cur * 10 + s[pos] - '0';
                    pos++;
                }
                if (cur <= pre) {
                    return false;
                }
                pre = cur;
            } else {
                pos++;
            }
        }
        return true;
    }
};