Как проверить число с плавающей запятой по спецификатору формата? - PullRequest
1 голос
/ 30 июня 2011

Я хочу проверить ввод пользователя по спецификатору формата. Например, спецификаторы формата% 4.5f,% 4f,% 10.5f и т. Д. Если я укажу% 5.2f в качестве спецификатора формата, я должен иметь возможность проверить ввод пользователя, независимо от того, удовлетворяет заданному формату% 5.2f или нет?

Примечание. Я использую C ++ в среде Windows.

1 Ответ

2 голосов
/ 30 июня 2011

Вы захотите сопоставить строки с регулярным выражением.Выражение должно быть следующим:

[0-9]{n}\.[0-9]{m}

Здесь n и m - количество требуемых цифр.Вы можете построить регулярное выражение из строки, поэтому просто создайте строку шаблона из ваших параметров, а затем создайте регулярное выражение;это все в <regex> на компиляторах C ++ 0x (или <tr1/regex> в противном случае).

Будьте внимательны, либо сопоставляйте всю входную строку, либо окружайте выражение границами слова, чтобы избежать совпадения 12345.67890 с m = 2, n = 2 как "45,67".


Редактировать: Вот один подход:

std::regex make_pattern(size_t m, size_t n)
{
  std::ostringstream ss;
  ss << "\b([0-9]{" << std::dec << m << "}\\.[0-9]{" << n << "})\b";
  return std::regex(ss.str());
}

/* later */

std::regex rx = make_pattern(4, 5);
std::string input = get_input();
const bool is_valid = std::regex_match(input, rx);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...