如何查找整数是否在其十六进制表示中包含字母

del*_* me 1 c++ stream

我试图用C++编写一个方法,它确定一个整数是否在其十六进制表示中使用流操作符而不使用任何for循环.一种方法是使用getline和做一些数学.有人可以提供所需计算类型的提示吗?

我感谢你的帮助或使用循环算术,但我正在寻找一些不迭代字符串的东西

gwi*_*rrr 6

使用C++ ostringstreamstring:

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)


Fel*_*ano 5

将int除以16,直到达到零.每次检查余数,如果> 9十六进制包含字母.