如何用‘----’填充字符串实现测试日志中PASSED/FAILED结果对齐?
测试日志对齐问题的解决方案
当前测试日志输出未对齐:
test subject number 12 had result 0.12334 ------> PASSED!!! test subject number 1 had result 56 ------> PASSED!!! test subject number 123 had result 2 ------> FAILED!!!
需要实现的对齐效果:
test subject number 12 had result 0.12334 ------> PASSED!!! test subject number 1 had result 56 ------------> PASSED!!! test subject number 123 had result 2 -----------> FAILED!!!
原函数问题分析
你写的函数逻辑存在错误:循环条件i < 200 - initial_size完全不符合对齐需求,它会根据原字符串长度动态调整填充量,导致不同长度的原字符串最终填充后的总长度不一致,无法实现PASSED/FAILED的对齐。
修正后的代码
直接固定箭头的起始位置,通过填充短横线补全到该位置后再添加状态文本:
void AddPassedOrFailed(std::string& LogMessage, bool passed) { // 设定箭头开始的目标列位置,可根据实际日志长度调整 const int target_arrow_position = 40; int initial_length = LogMessage.size(); // 填充短横线,直到字符串长度达到箭头位置的前一位 if (initial_length < target_arrow_position - 1) { LogMessage.append(target_arrow_position - 1 - initial_length, '-'); } // 添加箭头和状态信息 LogMessage += "> "; LogMessage += passed ? "PASSED!!!" : "FAILED!!!"; LogMessage += "\n"; }
修正说明
- 固定对齐基准:用
target_arrow_position指定>出现的列位置,所有日志的箭头都会统一到这一列,自然实现状态文本的对齐 - 高效填充:使用
std::string::append批量填充短横线,比循环逐个添加更简洁高效 - 逻辑清晰:先补全短横线到目标位置,再统一添加箭头和状态,避免原代码中循环条件混乱的问题
内容的提问来源于stack exchange,提问作者evening
相关产品推荐
相关产品推荐

