我們經常需要將string類型轉換為int、long、double、float類型,cctype頭文件提供了轉換前的驗證函數isdigit()和isxdigit()。經vs2010實驗:
main()
{
std:: strDigit="";
std:: strXDigit="";
* szDigit="";
* szXDigit="";
std::locale loc("");
(isdigit(*szDigit))
{
std::cout<<szDigit<<"";
}
(isdigit(*(strDigit.c_str())))
{
std::cout<<strDigit<<"";
}
(isxdigit(*szXDigit))
{
std::cout<<szXDigit<<"";
}
(isxdigit(*(strXDigit.c_str())))
{
std::cout<<strXDigit<<"";
}
0;
}
程序輸出:
123.35 is digit.
456.123 is digit.
0x56 is hex.
0x57 is hex.
如果不是使用*szDigit、*szXDigit、*(strDigit.c_str())、*(strXDigit.c_str()),而是使用szDigit、szXDigit、strDigit.c_str()、strXDigit.c_str(),則不能編譯成功。
在vc2012中需要引用locale頭文件,用法為
std::locale loc("");
isdigit(*szDigit,loc);
但是要用szDigit可以編譯通過,但是不會得到正確的結果。