You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查十进制转十六进制结果仅含A、B、C、D、E、F、1、0字符?

解决十六进制字符校验问题

嘿,我懂你现在的困扰——已经完成了字符串转十进制的步骤,现在需要把这个十进制数转成十六进制,还要检查转出来的十六进制字符串是不是只包含A、B、C、D、E、F、0、1这些字符,最后设置一个布尔标志位对吧?我来帮你把这段代码补全,顺便把关键逻辑讲清楚。

首先,我们需要先把十进制数转换成十六进制字符串,这里用stringstream会很方便,还能直接控制输出大写的十六进制字母。然后遍历这个十六进制字符串的每一个字符,逐个检查是否在允许的范围内,最后根据检查结果设置布尔标志。

下面是完整的代码实现:

#include <iostream>
#include <string>
#include <sstream>
#include <cctype> // 用于isxdigit函数

using namespace std;

string solution(string &S) {
    // 字符串转十进制整数
    int n = stoi(S);
    cout << "stoi(\"" << S << "\") is " << n << '\n';

    // 十进制转十六进制字符串(大写)
    stringstream ss;
    ss << uppercase << hex << n;
    string hex_str = ss.str();
    cout << "Hexadecimal: " << hex_str << '\n';

    // 初始化布尔标志位,默认假设符合要求
    bool is_valid = true;
    // 定义允许的字符集合
    const string allowed_chars = "ABCDEF01";

    // 遍历十六进制字符串的每个字符
    for (char c : hex_str) {
        // 先检查是不是十六进制字符(可选,但能过滤非法字符)
        if (!isxdigit(c)) {
            is_valid = false;
            break;
        }
        // 再检查是否在允许的字符列表里
        if (allowed_chars.find(c) == string::npos) {
            is_valid = false;
            break;
        }
    }

    // 输出标志位结果
    cout << "Is valid hex? " << boolalpha << is_valid << '\n';

    // 这里可以根据需求返回相应内容,比如返回十六进制字符串或者其他
    return hex_str;
}

int main() {
    string test_str = "255"; // 测试用例,转十六进制是FF,会被判定为无效
    string test_str2 = "17"; // 转十六进制是11,有效
    solution(test_str);
    solution(test_str2);
    return 0;
}

关键逻辑说明:

  • 十进制转十六进制:用stringstream的hex操纵符实现转换,uppercase确保输出的字母是大写(和你要求的A-F匹配)。
  • 字符校验:
    1. 先用isxdigit快速过滤掉非十六进制字符(虽然从int转过来的十六进制理论上不会有,但加一层更稳妥)。
    2. 然后用string::find检查当前字符是否在我们定义的允许字符集合里,如果找不到(返回string::npos),就把标志位设为false并跳出循环。
  • 布尔标志位:默认设为true,只要发现一个不符合的字符就立刻设为false,避免不必要的遍历。

另外提个小注意:stoi只能处理int范围内的数,如果你的输入字符串可能超出int的范围(比如很大的数),可以换成stoll(转long long),对应的变量类型也改成long long,这样兼容性更好。

内容的提问来源于stack exchange,提问作者lotto 1988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:18:59