news 2026/4/15 14:22:08

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/4/12 21:44:15

外卖霸王餐api接口如何对接?

外卖霸王餐API接口对接是指将外卖平台的霸王餐活动集成到自己的应用程序或网站中&#xff0c;允许用户参与霸王餐活动。这种集成通常通过API&#xff08;应用程序编程接口&#xff09;实现。以下是外卖霸王餐API接口对接的一般步骤和注意事项&#xff1a;1. 对接前的准备工作1.…

作者头像 李华
网站建设 2026/4/14 4:10:57

VFXToolbox终极指南:5大功能亮点彻底改变特效制作流程

VFXToolbox终极指南&#xff1a;5大功能亮点彻底改变特效制作流程 【免费下载链接】VFXToolbox Additional tools for Visual Effect Artists 项目地址: https://gitcode.com/gh_mirrors/vf/VFXToolbox 还在为复杂的视觉特效制作流程而烦恼吗&#xff1f;VFXToolbox这款…

作者头像 李华
网站建设 2026/4/15 14:20:21

61、NFS文件服务器的配置与使用指南

NFS文件服务器的配置与使用指南 1. 为NFS开放防火墙 NFS服务的正常运行依赖多个不同的服务守护进程,且大多数守护进程会监听不同的端口。对于Fedora中默认使用的NFSv4,NFS服务器要正常运行,必须开放TCP和UDP的2049(nfs)和111(rpcbind)端口。同时,为了使showmount命令…

作者头像 李华
网站建设 2026/4/13 17:43:07

Fluent Terminal:重新定义Windows命令行体验的现代化工具

Fluent Terminal&#xff1a;重新定义Windows命令行体验的现代化工具 【免费下载链接】FluentTerminal A Terminal Emulator based on UWP and web technologies. 项目地址: https://gitcode.com/gh_mirrors/fl/FluentTerminal 还在为Windows自带的命令行工具界面陈旧、…

作者头像 李华
网站建设 2026/4/13 16:33:03

互联网大厂Java面试全解析:从Java核心到微服务与云原生

文章内容 场景描述 超好吃是一名刚毕业不久的Java开发小白&#xff0c;今天他来到一家知名互联网大厂进行面试。面试官以严肃但不失亲切的态度对他进行了技术问答。 第一轮&#xff1a;Java核心与平台 面试官&#xff1a; 请简单介绍一下Java SE 8的新特性&#xff1f; 超好吃&…

作者头像 李华
网站建设 2026/4/12 14:19:16

专业的智能招聘会哪家好

智能招聘会行业深度剖析&#xff1a;聘才猫大模型脱颖而出 行业痛点分析 当前&#xff0c;智能招聘会领域面临着诸多技术挑战。数据表明&#xff0c;传统招聘会在信息匹配精准度上存在较大问题&#xff0c;约70%的招聘信息推送未能精准命中目标候选人&#xff0c;导致招聘效率…

作者头像 李华