我想驗證格式說明符的用戶輸入。例如格式說明符%4.5f,%4f,%10.5f等,如果我指定%5.2f作爲格式說明符我應該能夠驗證用戶輸入是否滿足給定的格式%5.2f或不?如何根據格式說明符驗證浮點數?
注:我在Windows環境中使用C++。
我想驗證格式說明符的用戶輸入。例如格式說明符%4.5f,%4f,%10.5f等,如果我指定%5.2f作爲格式說明符我應該能夠驗證用戶輸入是否滿足給定的格式%5.2f或不?如何根據格式說明符驗證浮點數?
注:我在Windows環境中使用C++。
你會想對正則表達式進行字符串匹配。表達應該是:
[0-9]{n}\.[0-9]{m}
這裏Ñ和米是數字到要的號碼。你可以從一個字符串構建一個正則表達式,所以只需從你的參數中創建模式字符串,然後構造正則表達式;它全部位於C++ 0x編譯器上的<regex>
(否則<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);
聽起來更像是字符串匹配不是數字的東西給我。正則表達式如何?如果你是現代人,那麼標準的''標題應該能讓你順利進行。 –
感謝您的回答Kerrek。它使用正則表達式的好主意。那麼我是否需要爲每個格式字符串編寫正則表達式? –