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

在C++中如何根据用户输入的格式化规则完成字符串格式化操作?

需求实现方案

核心逻辑

现有整型变量int x = 100;,需要根据用户输入的动态格式化字符串输出对应结果,核心要解决两个问题:

  • 16进制格式输出要求带0x前缀,原生基础格式化符默认不带前缀,需要额外处理
  • 浮点类格式化符(如%f)直接传入整型参数会触发类型不匹配错误,需要先做类型转换

注:需求示例中输入%x输出0x40属于数值笔误,100转16进制的标准结果为0x64,如果需要固定输出0x40可自行添加数值映射逻辑即可。

C 语言实现代码

#include <stdio.h>
#include <string.h>

void format_output(int val, const char* user_fmt) {
    // 判断是否为16进制格式化
    if (strchr(user_fmt, 'x') || strchr(user_fmt, 'X')) {
        // 插入#标志自动生成0x前缀
        char adjusted_fmt[256];
        snprintf(adjusted_fmt, sizeof(adjusted_fmt), "%%#%s", user_fmt + 1);
        printf(adjusted_fmt, val);
    } 
    // 判断是否为浮点类格式化
    else if (strpbrk(user_fmt, "fFeEgG")) {
        printf(user_fmt, (double)val);
    } 
    // 其他整型格式化场景直接输出
    else {
        printf(user_fmt, val);
    }
    printf("\n");
}

int main() {
    int x = 100;
    // 测试用例1:用户输入"%x"
    format_output(x, "%x"); // 输出0x64
    // 测试用例2:用户输入"%.4f"
    format_output(x, "%.4f"); // 输出100.0000
    return 0;
}

Python 实现代码

def format_output(val: int, user_fmt: str) -> str:
    if 'x' in user_fmt or 'X' in user_fmt:
        return f"0x{format(val, user_fmt[1:])}"
    return user_fmt % val

x = 100
# 测试用例1
print(format_output(x, "%x")) # 输出0x64
# 测试用例2
print(format_output(x, "%.4f")) # 输出100.0000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:57:01