C++字符串string的常用方法
一、基础构造与初始化#include string using namespace std; int main() { // 1. 默认构造空字符串 string s1; // 2. 用C风格字符串char*初始化 string s2(hello); string s3 world; // 等价于上面 // 3. 拷贝构造用另一个string初始化 string s4(s2); // s4 hello string s5 s2; // 等价 // 4. 用部分字符初始化 string s6(hello, 3); // 取前3个字符 → hel string s7(s2, 1, 3); // 从s2的索引1开始取3个 → ell // 5. 用重复字符初始化 string s8(5, a); // 5个a → aaaaa // 6. C11初始化列表 string s9{h, e, l, l, o}; return 0; }二、赋值与修改string s; // 1. 直接赋值 s hello; s string(world); s a; // 单个字符也可以 // 2. assign()更灵活的赋值 s.assign(hello); // 直接赋值 s.assign(hello, 3); // 取前3个 → hel s.assign(5, x); // 5个x → xxxxx s.assign(s2, 1, 2); // 从s2索引1取2个 // 3. swap()交换两个字符串的内容 string a apple, b banana; a.swap(b); // 现在abanana, bapple三、访问字符索引 / 迭代器string s hello; // 1. [] 下标访问不检查越界越界会崩溃 char c1 s[0]; // h s[0] H; // 修改为 Hello // 2. at()带越界检查的访问越界会抛异常更安全 char c2 s.at(1); // e // 3. 首尾字符 char first s.front(); // C11等价 s[0] char last s.back(); // C11等价 s[s.size()-1] // 4. 迭代器遍历类似指针 for (auto it s.begin(); it ! s.end(); it) { cout *it; // 依次输出 h e l l o } // 反向迭代器 for (auto it s.rbegin(); it ! s.rend(); it) { cout *it; // 依次输出 o l l e h }四、字符串拼接最常用string s1 hello, s2 world; // 1. 运算符最直观 string s3 s1 s2; // hello world s1 !; // s1 变成 hello! // 2. append()更灵活的拼接 s1.append(s2); // 直接拼s2 s1.append(abc, 2); // 拼abc的前2个 → ab s1.append(3, x); // 拼3个x → xxx s1.append(s2, 1, 2); // 拼s2从索引1开始的2个字符 // 3. push_back()只拼单个字符 s1.push_back(!);五、字符串比较string a apple, b banana; // 1. 直接用比较运算符按字典序/ASCII码比较 if (a b) cout 相等; if (a ! b) cout 不等; if (a b) cout a字典序在b前面; // apple banana 为真 if (a b) cout a字典序在b后面; if (a b) cout 小于等于; if (a b) cout 大于等于; // 2. compare()更详细的比较返回int // 返回0相等返回0a b返回0a b int res a.compare(b); res a.compare(1, 3, b); // a从索引1开始的3个字符 和 b 比较 res a.compare(1, 3, b, 0, 2); // a的[1,3) 和 b的[0,2) 比较六、查找与搜索解析 HTTP/URL 必备这是你处理网络请求最常用的操作比如解析 URI、找参数位置。string s hello world hello; // 1. find()从前往后找返回第一次出现的索引找不到返回 string::npos size_t pos s.find(hello); // 返回 0 pos s.find(hello, 1); // 从索引1开始找返回 12 pos s.find(w); // 找单个字符返回 6 pos s.find(abc); // 找不到返回 string::npos // 2. rfind()从后往前找反向查找 pos s.rfind(hello); // 从后往前找返回 12 // 3. find_first_of()找任意一个匹配的字符 pos s.find_first_of(aeiou); // 找第一个元音字母返回 1e // 4. find_last_of()找最后一个匹配的字符 pos s.find_last_of(aeiou); // 返回 13最后一个l前面的o // 5. find_first_not_of()找第一个不匹配的字符 pos s.find_first_not_of(helo);// 找第一个不是h/e/l/o的字符返回5空格 // 【常用判断】找不到的处理 if (pos string::npos) { cout 没找到; }七、截取、替换、插入、删除1. 截取substr解析 URI / 参数必备string s hello world; // substr(pos, len)从pos开始截取len个字符 string sub1 s.substr(0, 5); // 从0开始取5个 → hello string sub2 s.substr(6); // 从6开始取到末尾 → world string sub3 s.substr(6, 3); // 从6开始取3个 → wor2. 替换replacestring s hello world; // replace(pos, len, new_str)从pos开始替换len个字符为new_str s.replace(6, 5, C); // 把world换成C → hello C // 更灵活的替换 s.replace(0, 5, hi, 2); // 替换前5个为hi的前2个3. 插入insertstring s hello; // insert(pos, str)在pos位置插入str s.insert(5, world); // 在索引5插入 → hello world s.insert(0, 2, x); // 在开头插入2个x → xxhello world4. 删除erasestring s hello world; // erase(pos, len)从pos开始删除len个字符 s.erase(5, 6); // 删除从5开始的6个 → hello s.erase(0); // 从0删到末尾 → 空字符串 s.clear(); // 清空字符串等价 s.erase() // 用迭代器删除 s.erase(s.begin()); // 删除第一个字符 s.erase(s.begin(), s.begin()3); // 删除前3个字符八、字符串转换与数字互转、C 风格字符串互转1. 与 C 风格字符串char*互转string s hello; // string → const char*只读不要修改返回值 const char* c_str s.c_str(); const char* data s.data(); // C11前和c_str略有不同C11后等价 // char* → string直接赋值或构造即可 char arr[] world; string s2(arr);2. 与数字互转C11 标准库函数最方便// 【数字 → string】 string s; s to_string(123); // int → 123 s to_string(45.67); // double → 45.670000 s to_string(true); // bool → 1 // 【string → 数字】 string num_str 123; int i stoi(num_str); // string → int long l stol(num_str); // string → long long long ll stoll(num_str); // string → long long float f stof(3.14); // string → float double d stod(3.14159); // string → double // 进阶带进制和位置参数 size_t pos; int hex stoi(0x1a, pos, 16); // 16进制转10进制 → 26九、其他常用操作string s hello; // 1. 大小/长度 if (s.empty()) cout 空字符串; int len s.size(); // 等价 s.length()推荐用size()和STL容器统一 // 2. 调整大小 s.resize(10, x); // 把s调整为10个字符多出来的用x填充 → helloxxxxx s.resize(3); // 截断为3个字符 → hel // 3. 预留空间优化性能避免频繁扩容 s.reserve(100); // 预留100个字符的空间但不改变size() int cap s.capacity(); // 获取当前容量 // 4. C17string_view只读视图零拷贝性能优化 // 适合只需要读取、不需要修改字符串的场景避免拷贝开销 string_view sv s; // 直接指向s的内存不拷贝 cout sv[0]; // 读取和string一样十、给你的网络编程场景实用小技巧1. 解析 HTTP 请求行GET /index.html HTTP/1.1string req_line GET /index.html HTTP/1.1; size_t space1 req_line.find( ); size_t space2 req_line.find( , space1 1); string method req_line.substr(0, space1); // GET string uri req_line.substr(space1 1, space2 - space1 - 1); // /index.html string version req_line.substr(space2 1); // HTTP/1.1//更好的方法 std::string req_line GET /index.html HTTP/1.1; std::string method, uri, version; std::istringstream iss(req_line); iss method uri version;2. 去除字符串首尾空格string trim(string s) { // 去除开头空格 s.erase(0, s.find_first_not_of( \t\n\r)); // 去除末尾空格 s.erase(s.find_last_not_of( \t\n\r) 1); return s; }3. 分割字符串按分隔符拆分vectorstring split(const string s, char delimiter) { vectorstring tokens; string token; istringstream tokenStream(s); while (getline(tokenStream, token, delimiter)) { tokens.push_back(token); } return tokens; } // 使用split(a,b,c, ,) → 返回 {a,b,c}

相关新闻

供应链安全扫描新范式:如何用xpoc实现快速应急响应?

供应链安全扫描新范式:如何用xpoc实现快速应急响应?

供应链安全扫描新范式:如何用xpoc实现快速应急响应? 【免费下载链接】xpoc 为供应链漏洞扫描设计的快速应急响应工具 [快速应急] [漏洞扫描] [端口扫描] [xray2.0进行时] A fast emergency response tool designed for supply chain vulnerability scann…

2026/8/5 13:26:58 阅读更多 →
3ds Max无插件火焰特效制作:从粒子流到材质渲染全流程解析

3ds Max无插件火焰特效制作:从粒子流到材质渲染全流程解析

1. 项目缘起:为什么不用插件做火焰?在3ds Max的日常特效制作中,火焰效果是一个高频需求,无论是游戏宣传片、影视概念设计,还是产品展示动画,都少不了它的身影。一提到火焰,很多朋友的第一反应就…

2026/8/5 13:26:58 阅读更多 →
如何快速掌握Outfit字体:免费商用几何字体的完整实战指南

如何快速掌握Outfit字体:免费商用几何字体的完整实战指南

如何快速掌握Outfit字体:免费商用几何字体的完整实战指南 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts Outfit字体是一款完全免费商用的现代几何无衬线字体,由outfit.io…

2026/8/5 13:26:58 阅读更多 →

最新新闻

如何用Glass Browser实现Windows桌面终极多任务:透明悬浮浏览器完整指南

如何用Glass Browser实现Windows桌面终极多任务:透明悬浮浏览器完整指南

如何用Glass Browser实现Windows桌面终极多任务:透明悬浮浏览器完整指南 【免费下载链接】glass-browser A floating, always-on-top, transparent browser for Windows. 项目地址: https://gitcode.com/gh_mirrors/gl/glass-browser 你是否厌倦了在多个窗口…

2026/8/5 14:06:15 阅读更多 →
如何用开源OpenArm机械臂构建你的第一个AI机器人实验平台

如何用开源OpenArm机械臂构建你的第一个AI机器人实验平台

如何用开源OpenArm机械臂构建你的第一个AI机器人实验平台 【免费下载链接】openarm A fully open-source humanoid arm for physical AI research and deployment in contact-rich environments. 项目地址: https://gitcode.com/GitHub_Trending/op/openarm 想在实验室里…

2026/8/5 14:06:15 阅读更多 →
KaTrain围棋AI训练:免费开源的全方位棋力提升终极指南

KaTrain围棋AI训练:免费开源的全方位棋力提升终极指南

KaTrain围棋AI训练:免费开源的全方位棋力提升终极指南 【免费下载链接】katrain Improve your Baduk skills by training with KataGo! 项目地址: https://gitcode.com/gh_mirrors/ka/katrain 想要快速提升围棋水平?KaTrain是一个基于KataGo开源围…

2026/8/5 14:06:15 阅读更多 →
5分钟快速恢复QQ空间历史数据:GetQzonehistory完整备份指南

5分钟快速恢复QQ空间历史数据:GetQzonehistory完整备份指南

5分钟快速恢复QQ空间历史数据:GetQzonehistory完整备份指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间的珍贵回忆随着时间流逝而消失?那些…

2026/8/5 14:06:15 阅读更多 →
Flutter与OpenHarmony结合开发逆向思维训练App实践

Flutter与OpenHarmony结合开发逆向思维训练App实践

1. 项目概述Flutter与OpenHarmony的结合开发确实是个有趣的方向。作为一名同时接触过这两个技术的开发者,我发现这种跨平台国产操作系统的组合在实际项目中越来越常见。这个项目主要包含两个核心功能模块:逆向思维训练App的实现和学习日历的集成。逆向思…

2026/8/5 14:06:15 阅读更多 →
基于最大最小距离准则优化拉丁超立方采样的工程实践

基于最大最小距离准则优化拉丁超立方采样的工程实践

1. 项目概述:当“均匀”遇见“最优”在仿真分析、机器学习模型训练、不确定性量化这些领域,我们常常需要从复杂的参数空间中抽取有代表性的样本点。直接随机撒点?效率太低,覆盖不均。用网格法?维度一高,计算…

2026/8/5 14:05:15 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →