2011-06-30 87 views
1

我想驗證格式說明符的用戶輸入。例如格式說明符%4.5f,%4f,%10.5f等,如果我指定%5.2f作爲格式說明符我應該能夠驗證用戶輸入是否滿足給定的格式%5.2f或不?如何根據格式說明符驗證浮點數?

注:我在Windows環境中使用C++。

+1

聽起來更像是字符串匹配不是數字的東西給我。正則表達式如何?如果你是現代人,那麼標準的''標題應該能讓你順利進行。 –

+0

感謝您的回答Kerrek。它使用正則表達式的好主意。那麼我是否需要爲每個格式字符串編寫正則表達式? –

回答

2

你會想對正則表達式進行字符串匹配。表達應該是:

[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); 
+0

你也可以使用類似的方法來使你的格式字符串 –

+0

'boost :: regex'庫是一個替代 – davka

+0

感謝您的輸入。 –