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 13:13:50

76、利用SELinux增强Linux安全性

利用SELinux增强Linux安全性 1. 查看进程安全上下文 要查看进程的安全上下文,需要在 ps 命令中使用 -Z 选项。以下示例使用 ps -eZ 命令,然后通过管道将结果传递给 grep ,以仅搜索运行 bash shell的进程: # ps -eZ | grep bash unconfined_u:unconfined_r:un…

作者头像 李华
网站建设 2026/6/10 10:59:11

80、Linux 安全技术与云计算入门

Linux 安全技术与云计算入门 1. Linux 网络安全基础 在网络环境中,保障 Linux 服务器的安全至关重要,因为大多数恶意攻击都源于网络,尤其是互联网。以下是保障 Linux 服务器安全的一些基础步骤和技术: - 识别并移除不必要的网络服务 :通过确定并移除不必要的网络服务…

作者头像 李华
网站建设 2026/6/10 10:30:04

代码随想录 图论理论基础

一、图的基本概念: 1.图的概念:二维坐标中,两点可以连成线,多个点连成的线就构成了图。当然,图也可以就一个节点,甚至没有节点(空图)。 2.图的种类:整体上,图一般分为有向图和无向图。 (1)有向图:图中的边是有方向的。 (2)无向图:图中的边是没有方向的。 (…

作者头像 李华
网站建设 2026/6/10 11:50:02

.NET拼音处理终极指南:Pinyin4NET完整功能解析与实战应用

.NET拼音处理终极指南&#xff1a;Pinyin4NET完整功能解析与实战应用 【免费下载链接】Pinyin4NET c# 拼音汉字/姓相互转换工具库 (这只是镜像仓库&#xff0c;源仓库见 https://gitee.com/hyjiacan/Pinyin4Net) 项目地址: https://gitcode.com/gh_mirrors/pi/Pinyin4NET …

作者头像 李华
网站建设 2026/6/10 19:37:27

医学影像AI开发革命:从代码堆砌到配置驱动的范式转变

医学影像AI开发革命&#xff1a;从代码堆砌到配置驱动的范式转变 【免费下载链接】MONAI AI Toolkit for Healthcare Imaging 项目地址: https://gitcode.com/GitHub_Trending/mo/MONAI 还在为医学影像AI项目中的重复编码、环境配置、模型部署而焦头烂额吗&#xff1f;想…

作者头像 李华
网站建设 2026/6/10 10:53:46

gradio快速部署大模型进行问答

一、模型准备 1. 下载模型&#xff1a;Qwen3-4B-Instruct-2507 import os # 1. 优先设置环境变量&#xff08;必须在导入transformers之前&#xff01;&#xff09; os.environ["HUGGINGFACE_HUB_CACHE"] r"D:\plc\cache" os.environ["HF_ENDPOINT…

作者头像 李华