如何去除前导0?
作者:
水果真甜
,
2025-04-08 11:12:14
· 广东
,
所有人可见
,
阅读 8
✅ 方式一:使用 find_first_not_of()
string s = "0000000021";
s = s.substr(s.find_first_not_of('0'));
if(!SZ(q)) s = "0";
✨ 特点:
- 高效简洁(由 STL 内部优化,底层实现快)
substr()
会直接从第一个非 0 字符开始复制剩下的部分
✅ 方式二:手动循环 + 标志变量
string a = "0000000021";
string s = "";
bool f = false;
for (int i = 0; i < a.size(); i++) {
if (a[i] == '0' && !f) continue;
f = true;
s += a[i];
}
if (s == "") s = "0";
✨ 特点:
- 逻辑清晰,便于自定义处理逻辑
- 一旦遇到第一个非 0 字符,开始收集字符
✅ 优点:
- 可以灵活拓展(比如过滤特定字符、统计数字、控制格式等)
功能对比总结表
比较项 |
方法一:find_first_not_of |
方法二:手动循环 |
简洁性 |
✅ 一行搞定 |
❌ 多行逻辑冗长 |
性能 |
✅ 高效(底层优化) |
❌ 稍慢,但够用 |
可扩展性 |
❌ 差(不可插入判断) |
✅ 灵活控制 |
全是 0 的处理 |
✅ 需额外判断 .empty() |
❌ 同样需额外判断 |
✅ 推荐使用:
- 快速处理普通用例时,使用
find_first_not_of()
✅
- 需要灵活判断更多条件时,用手动循环方式更合适 ✅