news 2026/6/10 14:57:22

C++学习记录-旧题新做-字符串压缩

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++学习记录-旧题新做-字符串压缩

旧题记录帖:https://blog.csdn.net/chamao_/article/details/143305269?fromshare=blogdetail&sharetype=blogdetail&sharerId=143305269&sharerefer=PC&sharesource=chamao_&sharefrom=from_link

c++解法:

class Solution { public: string compressString(string S) { if(S.empty()) return S; std::string s; s.reserve(S.length() * 2); // .reserve()能提前预留空间 int index = 0; int i = 0; while(i < S.length()) { char currentChar = S[i]; int count = 0; while(i < S.length() && S[i] == currentChar) { count++; i++; } // 追加字符和数字 s += currentChar; s += std::to_string(count); } if(s.length() >= S.length()) { return S; } return s; } };

1. 为什么用.reserve() 而不是 .resize()?

  • reserve(n):只是提前分配“容量”,不改变字符串长度

  • resize(n):改变字符串的“长度”,并用'\0'填充新增字符

在我的压缩字符串构造过程中,我并不希望字符串一开始就变长,所以要用reserve

2. std::to_string是什么?

to_string()用来把“数字类型”转换为std::string

例如:

std::string s = std::to_string(123); // "123"

std::string s = std::to_string(123); // "123"

这是C++11新增的功能。


3.to_string支持哪些类型?

它支持基本数字类型

类型示例
intstd::to_string(10)
longstd::to_string(123L)
long longstd::to_string(123LL)
unsignedstd::to_string(10u)
unsigned longstd::to_string(10ul)
unsigned long longstd::to_string(10ull)
floatstd::to_string(3.14f)
doublestd::to_string(3.14)
long doublestd::to_string(3.14L)

📌注意:不支持 char 和 bool!
如果你写:

std::to_string('A');

std::to_string('A');

它会把'A'当做数字 65 转换成"65"


4. 为什么 C++ 推荐用to_string而不是sprintf

因为它更安全、更直观:

✔ 不需要格式化字符串

sprintf写错一个%d%s会崩溃。

to_string不会。

✔ 无需关心缓冲区大小

sprintf必须让你自己保证 buffer 足够大。

to_string会自动管理内存,完全不会溢出。

对比:

char buf[20]; sprintf(buf, "%d", num); // 危险,需检查大小

char buf[20]; sprintf(buf, "%d", num); // 危险,需检查大小

C++ 写法:

std::string s = std::to_string(num);

std::string s = std::to_string(num);

一行解决。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:39:00

2025舆情分析报告平台公司选型指南:匹配业务需求的关键要素

2025年&#xff0c;信息传播速度突破秒级响应&#xff0c;政企、机构乃至个人面对的舆论环境愈发复杂。一条短视频弹幕、一篇小红书测评、甚至一段直播中的即兴发言&#xff0c;都可能在数小时内演变为品牌危机或公共事件。舆情监测系统已不再只是“信息检索工具”&#xff0c;…

作者头像 李华
网站建设 2026/6/9 3:40:54

71、深入了解 Linux 安全技术:基础与高级应用

深入了解 Linux 安全技术:基础与高级应用 1. Linux 系统基础安全审计与审查 在 Linux 系统中,保障系统安全是至关重要的,而审计和审查则是确保系统安全的重要手段。在进行系统健康审计时,有两个重要的概念需要理解:合规性审查和安全性审查。 合规性审查 :这是对整个计…

作者头像 李华
网站建设 2026/5/31 0:26:54

73、深入理解 Linux 系统中的 PAM 安全认证机制

深入理解 Linux 系统中的 PAM 安全认证机制 1. Linux 安全工具概述 在 Linux 系统中,有许多强大的安全工具可以帮助我们保护系统和数据的安全。例如,Pyrite 可以用于文件的加密和解密。而另一个极其强大的安全工具则是 PAM(Pluggable Authentication Modules)。 2. PAM …

作者头像 李华
网站建设 2026/6/8 13:17:29

快速上手GoView:零代码打造专业级数据大屏的终极指南

快速上手GoView&#xff1a;零代码打造专业级数据大屏的终极指南 【免费下载链接】go-view &#x1f3c6;GoView 是一个Vue3搭建的低代码数据可视化开发平台&#xff0c;将图表或页面元素封装为基础组件&#xff0c;无需编写代码即可完成业务需求。 它的技术栈为&#xff1a;Vu…

作者头像 李华
网站建设 2026/6/9 21:55:27

79、Linux 安全技术:网络服务访问控制与防火墙配置

Linux 安全技术:网络服务访问控制与防火墙配置 1. 网络服务访问控制 1.1 审计扫描与防火墙设置 在进行全面审计时,务必包含 UDP 扫描。此外,可以参考 nmap 工具网站获取更多有益的扫描建议。若为进行 nmap 扫描而降低了服务器防火墙,扫描完成后需重新启用防火墙,命令如…

作者头像 李华
网站建设 2026/6/7 13:53:19

2026年大模型AI面试宝典:高频面试题与答案解析,程序员必备,助你轻松应对面试挑战!

简介 本文是2025年最新AI大模型产品经理面试题集&#xff0c;涵盖八大核心模块&#xff1a;基础认知、技术理解、Prompt设计、工程化、场景设计、商业化、项目经验和伦理安全。深入探讨大模型产品经理与传统软件PM的区别、模型评估方法、Prompt工程、RAG架构、微调策略、商业化…

作者头像 李华