2011-04-29 76 views
0

我在字符串中有一個短整數。例如:「123456」。是否有任何API來檢查字符串是否包含在unsigned short範圍內的有效數字?在短期內驗證字符串

謝謝!

+0

的迄今爲止最簡單的方法檢查一個數字是否在一個範圍內應該把它轉換成一個整數(一個足夠大的整數類型,例如「長」),並使用比較運算符... – delnan 2011-04-29 16:07:30

+1

你的意思是ot她比'errno = 0; strtoul(str,0,10)<= USHRT_MAX &&!errno'? – 2011-04-29 16:11:30

回答

0

我會使用strtol來轉換數字,並檢查它是否是一個有效的數字字符串,使用「endptr」參數。然後你可以把它轉換成簡短的並檢查是否平等。

3

只需使用流運營商輸入號碼:(需要頭sstream

istringstream istr("12346"); 
short s; 
if ((istr >> s) and istr.eof()) 
    cout << "valid: " << s << endl; 
else 
    cout << "invalid" << endl; 

+0

-1這不會總是。考慮你的字符串是否是「1542 2451」。您的程序將打印「有效:1542」。 – 2011-04-29 16:30:54

+0

@Mhhran - 這是如何破壞? 1542是一個有效的短期AFAIK。 OP沒有提到字符串中有多個數字 - 因此,這種解決方案很好... – Nim 2011-04-29 16:32:45

+0

我認爲OP想要檢查: 1.如果字符串包含整數2.如果它在短範圍內。 但這個答案不符合第一個條件。 – 2011-04-29 16:35:20

1

我喜歡的boost::lexical_cast

#include <boost/lexical_cast.hpp> 
#include <iostream> 
#include <string> 

int main() { 
    std::string s("12346"); 
    try { 
    boost::lexical_cast<unsigned short>(s); 
    std::cout << "valid\n"; 
    } catch (boost::bad_lexical_cast&) { 
    std::cout << "invalid\n"; 
    } 
}