我试图用C++编写一个方法,它确定一个整数是否在其十六进制表示中使用流操作符而不使用任何for循环.一种方法是使用getline和做一些数学.有人可以提供所需计算类型的提示吗?
我感谢你的帮助或使用循环算术,但我正在寻找一些不迭代字符串的东西
使用C++ ostringstream和string:
bool hasHexDigits(int number)
{
std::ostringstream output;
output << std::hex << number;
return output.str().find_first_of("abcdefABCDEF") != string::npos;
}
Run Code Online (Sandbox Code Playgroud)
编辑:其他解决方案,不使用流.这是更好的性能(没有分支)和内存明智(没有分配),但可能太高级的"功课":
template<int I> struct int_to_type
{
static const int value = I;
};
inline bool __hasHexCharacters(int number, int_to_type<0>)
{
return false;
}
template <int digitsLeft>
inline bool __hasHexCharacters(int number, int_to_type<digitsLeft>)
{
return ((number & 0xF) > 9) | __hasHexCharacters(number >> 4, int_to_type<digitsLeft-1>());
}
inline bool hasHexCharacters(int number)
{
return __hasHexCharacters(number, int_to_type<2 * sizeof(int)>());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |