当前位置: 首页 > news >正文

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);

一行解决。

http://www.cnnetsun.cn/news/24191.html

相关文章:

  • Kimi-VL-A3B-Thinking-2506:多模态大模型实现“思考效率与视觉能力“双重突破
  • 81、使用 Linux 进行云计算的详细指南
  • 前端如何通过JavaScript实现视频文件的分段上传?
  • 深度解析:智谱GLM-4.5如何用3大创新突破AGI技术瓶颈
  • TinyMCE4粘贴ppt幻灯片转存网页兼容
  • 23、Linux Web服务器综合指南
  • 3小时精通Halo仪表盘组件开发:从零到一的完整实战手册
  • Kali Linux 高级Web渗透测试工具全解析:构建专业级安全评估能力
  • 湖泊数据在科研与工程中的应用
  • RDP Wrapper配置库完全使用指南:解锁Windows远程桌面全部潜能
  • 官宣!TDengine 授权麦斯时代为钻石分销商,共筑工业数据新生态
  • 亿欧 2025 AI 软件创新产品 Top10 出炉,时序数据库TDengine 入选
  • 百度网盘秒传技术全解析:从零基础到效率达人的终极指南
  • OpenAI Whisper Large-V3-Turbo本地部署终极指南:从零搭建到性能调优
  • 75、深入探索GDB调试器:命令详解与实用技巧
  • 7 款热门文件加密软件深度测评!2025 加密工具最佳选择
  • Linux环境下的C语言编程(四十)
  • 矮冬瓜矮砧密植:水肥一体化系统铺设全攻略
  • P11960 [GESP202503 五级] 平均分配
  • PINNs-Torch:实现9倍加速的物理信息神经网络框架
  • GPT-5.2发布!这些超强新功能,快来看看它是怎么让你的工作更轻松的!
  • ChromePass:三分钟掌握Chrome密码提取的终极指南
  • 【方法】IP66.net:如何查到自己的IP?
  • 南京大学开源SteadyDancer模型实现完美动作迁移,首帧保留彻底解决身份漂移难题
  • 机器视觉相机参数
  • springboot基于vue的观赏鱼养殖互助商城系统的设计与实现_1vlf0334
  • 压差式静力水准仪液体选择必看!从充液到排气:沉降监测系统安装全流程避雷手册
  • 构建可靠数据库连接:人大金仓JDBC驱动8.6.0实战指南
  • 嵌入式零基础到就业年班
  • 如何快速提取Chrome密码:跨平台开源工具完整指南