轉載 http://blog.youkuaiyun.com/jamesfancy/article/details/1543338
从字符串解析出int和bool等类型的值
说到将字符串解析成int,首先想到的一定是atoi、atol等C函数。如果用C++来完成这些工具函数,那就要用到std::istringstream。
除了解析bool值之外,下面这个函数可以解析大部分的类型的数值:
template
<
class
T
>
parseString(
const
std::
string
&
str) {
T value;
std::istringstream iss(str);
iss >> value;
return value;
}
T value;
std::istringstream iss(str);
iss >> value;
return value;
}
上面这个模板可以将0解析成bool值false,将非0解析成treu。但它不能将字符串"false"解析成false,将"true"解析成true。因此要用一个特别的函数来解析bool型的值:
template<bool>
bool parseString( const std:: string & str) {
bool value;
std::istringstream iss(str);
iss >> boolalpha >> value;
return value;
}
bool parseString( const std:: string & str) {
bool value;
std::istringstream iss(str);
iss >> boolalpha >> value;
return value;
}
上面的函数中,向输入流传入一个std::boolalpha标记,输入流就能认识字符形式的"true"和"false"了。
使用与之类似的办法解析十六进制字符串,需要传入的标记是std::hex:
template
<
class
T>
parseHexString(
const
std::
string
&
str) {
T value;
std::istringstream iss(str);
iss >> hex >> value;
return value;
}
T value;
std::istringstream iss(str);
iss >> hex >> value;
return value;
}