在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
相关产品推荐
相关产品推荐

