问题描述 链接到标题
解题思路 链接到标题
模拟一 链接到标题
首先将字符串的首尾都加上空格,然后遍历即可,检查两次空格之间的字符串是否是数字,如果是就转化为数字;
模拟二 链接到标题
直接判断字符是否是数字,如果是数字,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;
}
};