#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
bool isNumber(const string& s) {
long double t;
istringstream r(s);
return r >> t >> ws && r.eof();
}
int main() {
std::vector<string> test{
"3", "-3", // ints
"1 3", " 13", " 1 3 ", "13 ", // weird spacing
"0.1", "-100.123123", "1000.12312", // fixed point
"1e5", "1e-5", "1.5e-10", "1a.512e4", // floating point
"a", "1a", "baaa", "1a", // invalid
"1e--5", "1e-", //invalid
};
for (auto t : test) {
cout.width(20); cout << t << " " << isNumber(t) << endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIGlzTnVtYmVyKGNvbnN0IHN0cmluZyYgcykgewogICAgbG9uZyBkb3VibGUgdDsKICAgIGlzdHJpbmdzdHJlYW0gcihzKTsKCiAgICByZXR1cm4gciA+PiB0ID4+IHdzICYmIHIuZW9mKCk7Cn0KCmludCBtYWluKCkgewogIHN0ZDo6dmVjdG9yPHN0cmluZz4gdGVzdHsKICAgICIzIiwgIi0zIiwgLy8gaW50cwogICAgICAiMSAzIiwgIiAxMyIsICIgMSAzICIsICIxMyAiLCAvLyB3ZWlyZCBzcGFjaW5nCiAgICAgICIwLjEiLCAiLTEwMC4xMjMxMjMiLCAiMTAwMC4xMjMxMiIsIC8vIGZpeGVkIHBvaW50CiAgICAgICIxZTUiLCAiMWUtNSIsICIxLjVlLTEwIiwgIjFhLjUxMmU0IiwgLy8gZmxvYXRpbmcgcG9pbnQKICAgICAgImEiLCAiMWEiLCAiYmFhYSIsICIxYSIsIC8vIGludmFsaWQKICAgICAgIjFlLS01IiwgIjFlLSIsIC8vaW52YWxpZAogICAgICB9OwoKICBmb3IgKGF1dG8gdCA6IHRlc3QpIHsKICAgIGNvdXQud2lkdGgoMjApOyBjb3V0IDw8IHQgPDwgIiAiIDw8IGlzTnVtYmVyKHQpIDw8IGVuZGw7CiAgfQp9