Поскольку никто больше не упоминал об этом: очевидное решение заключается в том, что вы хотите знать, имеет ли строка заданный синтаксис, - использовать регулярные выражения.Я не уверен, что это лучшее решение в этом случае, поскольку регулярное выражение для легального double довольно сложно (и, следовательно, легко ошибиться).И ваша спецификация несколько расплывчата: вы хотите принять любую строку, которая может быть проанализирована (например, >>
), как допустимый double, или только ваша строка может быть возвращена вашей doubleToString
функцией?Если первое, самое простое решение, вероятно, состоит в том, чтобы преобразовать строку в двойное число, убедившись, что ошибки нет, и вы использовали все символы (решение Мартина, за исключением того, что глупо делать его шаблоном, пока вам это не нужно),Если последнее, самое простое решение состоит в том, чтобы преобразовать двойник, который вы нашли, обратно в строку, используя вашу функцию, и сравнить две строки.(Просто чтобы прояснить разницу: функция Мартина вернет true
для таких вещей, как " 1.0"
, "1E2"
, ".00000000001"
и "3.14159265358979323846264338327950288419716939937"
, которые ваша функция никогда не сгенерирует.)