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

GESP三级语法知识(六、string 入门与基础操作)


🌟 第一课:《string 入门与基础操作》


🏰 第一章:string 是什么?(升级版小火车)


1、🎯 故事

以前我们用的是:

👉 char数组 = 小火车 🚂(要自己管理)

现在来了一个超级智能火车 🚄

👉 它叫:string


2、🌟 对比一下

类型特点
char数组麻烦 😵
string自动管理 😎

3、🎯 举例

#include<iostream> #include<string> using namespace std; int main() { string s = "Hello"; cout << s; }

👉 不用管\0
👉 不用担心越界!


🌟 第二章:string 的定义方式


🎯 方法1(最常用)

string s = "Hello";

🎯 方法2

string s("Hello");

🎯 方法3(空字符串)

string s;

🎯 方法4(重复字符)

string s(5, 'A');

👉 结果:

AAAAA

🌟 第三章:输入输出(比 char 简单太多🔥)


1、🎯 输入

string s; cin >> s;

👉 读到空格停止


2、🎯 读整行(重点)

getline(cin, s);

3、🎯 示例

string s; getline(cin, s); cout << s;

🌟 第四章:访问字符(像数组一样)


1、🎯 示例

string s = "Hello"; cout << s[0]; // H cout << s[1]; // e

2、🎯 修改字符

s[0] = 'Y';

👉 结果:

Yello

🌟 第五章:字符串长度


1、🎯 方法

s.length() s.size()

👉 两个一样!


2、🎯 示例

string s = "Hello"; cout << s.length(); // 5

🌟 第六章:字符串拼接(超级简单🔥)


🎯 方法1:+

string a = "Hello"; string b = "World"; string c = a + b;

👉 HelloWorld


🎯 方法2:+=

a += b;

🌟 第七章:字符串比较


1、🎯 可以直接用!

if(a == b) if(a < b) if(a > b)

👉 自动按字典序比较!


2、🎯 示例

string a = "apple"; string b = "banana"; if(a < b) { cout << "apple < banana"; }

🌟 第八章:遍历 string(重要🔥)


🎯 方法1:下标

for(int i = 0; i < s.length(); i++) { cout << s[i]; }

🎯 方法2:范围 for(高级一点)

for(char c : s) { cout << c; }

🌟 第九章:常用函数(基础版)


🎯 1:append(拼接)

s.append("abc");

🎯 2:push_back(加一个字符)

s.push_back('A');

🎯 3:pop_back(删最后一个)

s.pop_back();

🎯 4:empty(是否为空)

if(s.empty())

🎯 5:clear(清空)

s.clear();

🌟 第十章:小练习(巩固🔥)


🎯 练习1:统计长度

输入:

hello

输出:

5

参考代码:

#include<iostream> #include<string> using namespace std; int main() { string s; cin >> s; // 输入字符串(遇到空格结束) cout << s.length() << endl; // 输出长度 return 0; }

🎯 练习2:转大写

👉 遍历 + 修改

参考代码:

#include<iostream> #include<string> using namespace std; int main() { string s; cin >> s; for(int i = 0; i < s.length(); i++) { if(s[i] >= 'a' && s[i] <= 'z') { s[i] = s[i] - 32; // 转大写 } } cout << s << endl; return 0; }

🎯 练习3:拼接两个字符串

参考代码:

#include<iostream> #include<string> using namespace std; int main() { string a, b; cin >> a >> b; string c = a + b; // 拼接 cout << c << endl; return 0; }

🌟 本节总结(必须掌握🔥)


✅ string 不需要\0
✅ 支持+拼接
✅ 支持== < >比较
.length()获取长度
✅ 可以像数组访问


接下来继续学习


🌟 第二课:《string 高级操作 + 字符串互转(核心🔥)》


🧩 第一章:substr(截取子串)


1、🎯 故事

小机器人拿到一段话:

HelloWorld

它只想要:

World

👉 怎么切出来?用substr ✂️


2、🎯 用法

s.substr(起始位置, 长度)

3、🎯 示例

string s = "HelloWorld"; cout << s.substr(5, 5);

👉 输出:

World

4、🎯 特殊写法(常用🔥)

s.substr(5)

👉 表示:从5到结尾


5、⚠️ 易错点

❌ 下标从0开始
❌ 长度不能越界


🔍 第二章:find(查找)


1、🎯 故事

机器人要找:

👉 “World 在哪里?”


2🎯 用法

s.find("子串")

3、🎯 示例

string s = "HelloWorld"; cout << s.find("World");

👉 输出:

5

4、🎯 找不到怎么办?

👉 返回:

string::npos

5、🎯 判断写法(重要🔥)

if(s.find("abc") != string::npos) { cout << "找到了"; }

✂️ 第三章:erase(删除)


1、🎯 故事

字符串里混入了坏字符,要删除!


2、🎯 用法

s.erase(起始位置, 删除长度)

3、🎯 示例

string s = "HelloWorld"; s.erase(5, 5); cout << s;

👉 输出:

Hello

4、🎯 删除一个字符

s.erase(2, 1);

🧱 第四章:insert(插入)


1、🎯 故事

机器人要在中间插入东西!


2、🎯 用法

s.insert(位置, "内容")

3、🎯 示例

string s = "Hello"; s.insert(5, "World"); cout << s;

👉 输出:

HelloWorld

🔁 第五章:replace(替换)


1、🎯 故事

把错误单词换掉!


2、🎯 用法

s.replace(起始位置, 长度, "新内容")

3、🎯 示例

string s = "HelloWorld"; s.replace(5, 5, "C++"); cout << s;

👉 输出:

HelloC++

🔥 第六章:组合技(竞赛重点)


1、🎯 例:删除所有 "ab"

string s = "abcabdab"; while(s.find("ab") != string::npos) { int pos = s.find("ab"); s.erase(pos, 2); } cout << s;

👉 输出:

cd

🔗 第七章:string 与 char数组互转


🎯 1:string → char数组


方法1(常用)

string s = "Hello"; char a[100]; strcpy(a, s.c_str());

🌟 解释

s.c_str()

👉 把 string 变成C风格字符串(char*



🎯 2:char数组 → string


方法1(最简单)

char a[] = "Hello"; string s = a;

方法2

string s(a);

⚠️ 易错点总结(🔥)


❌ 1:find 返回值判断错误

if(s.find("abc")) ❌

✔ 正确:

if(s.find("abc") != string::npos)

❌ 2:erase 越界

s.erase(100, 2); ❌

❌ 3:忘记 include

#include <string> #include <cstring>

🌟 第八章:综合闯关题(实战🔥)


🥇 题1:提取文件名

输入: /home/user/test.txt 输出: test.txt

💡 思路

👉 找最后一个/


💻 代码

#include<iostream> #include<string> using namespace std; int main() { string s; cin >> s; int pos = s.find_last_of('/'); cout << s.substr(pos + 1); }


🥈 题2:替换所有空格为 '_'


💻 代码

string s; getline(cin, s); for(int i = 0; i < s.size(); i++) { if(s[i] == ' ') s[i] = '_'; } cout << s;


🥉 题3:删除所有数字


💻 代码

string s; cin >> s; string t = ""; for(char c : s) { if(!(c >= '0' && c <= '9')) t += c; } cout << t;


🏅 题4:统计子串出现次数


💻 代码

string s = "ababab"; string t = "ab"; int cnt = 0; int pos = 0; while((pos = s.find(t, pos)) != string::npos) { cnt++; pos++; // 可以改为 pos += t.size(); } cout << cnt;

🎯 最终总结


💎 核心函数

函数作用
substr截取
find查找
erase删除
insert插入
replace替换

💎 必会技能

✅ 子串处理
✅ 查找 + 删除组合
✅ 字符串修改
✅ string 与 char数组互转


http://www.jsqmd.com/news/563218/

相关文章:

  • 基于STM32的直流电机PWM调速系统设计与实现(含代码分享)
  • 深入剖析Keil-MDK编译结果:Code、RO-data、RW-data与ZI-data的存储与运行机制
  • 从‘虚拟’到‘物理’:程序员视角下的内存块、页框与页到底是怎么协作的?
  • Downr1n实战手册:解锁iOS设备降级自由,告别版本限制的终极方案
  • G-Helper完全手册:华硕笔记本终极性能调优指南
  • 【5G NTN语音增强】面向应急通信的IoT NTN低时延语音方案设计与信令优化
  • 3大突破!RevokeMsgPatcher让消息防撤回效率提升80%全方位解决方案
  • SenseVoice模型实战 | 微调训练如何攻克AI领域专业术语的语音识别难题
  • BepInEx插件框架:构建企业级Unity游戏扩展的5大核心架构设计
  • 视频硬字幕提取终极指南:本地化AI工具让字幕制作效率提升10倍
  • 避坑指南:Silvaco TCAD光电仿真中,均匀光与高斯光设置对结果影响的深度解析
  • 告别配置焦虑:用LVGL v9的lv_conf.h模板快速适配你的开发板(STM32/ESP32/Raspberry Pi Pico)
  • 90%的中小公司Docker排查耗时过长:3步通用法让工作效率提升5倍
  • 3 solidJS实战:响应式状态管理的革命性设计与高效开发流程在现代前端开发中,
  • Chiplet通信结构实战指南:从AMD EPYC到Intel AIB的架构选择与性能对比
  • 金三银四大模型面试通关秘籍!面试官最爱的高频考点+答案解析,助你轻松拿下Offer!
  • Java内存溢出别慌!手把手教你用jvisualvm分析.hprof文件(附实战代码)
  • 二叉树面试送分题|力扣101对称+226翻转(递归极简写法,手写无压力)
  • 告别臃肿SDK!手把手教你用PyQt5+奥比中光SDK精简版,5分钟搞定深度相机实时显示
  • 别再瞎设50Ω了!HFSS/CST仿真中S参数端口阻抗到底怎么设?手把手教你避坑
  • 深度学习实战:从零构建验证码识别模型
  • 避坑指南:解决Ubuntu 22.04 + ROS Humble下MAVROS编译失败的几个常见问题
  • CH1115 OLED驱动库:内存优化多屏共享与硬件动画实现
  • ComfyUI更新后报错不断?手把手教你排查GPU显存与节点缺失问题(附4090实测)
  • UPS后备时间怎么算?一文读懂核心公式逻辑
  • 《string 专项 训练(进阶)习题》
  • 5分钟掌握CT肺部分割:lungmask深度学习实战完整指南
  • 用Multisim和74LS系列芯片复刻经典交通灯:一个电子课程设计的完整复盘与避坑指南
  • 如何彻底解决iPhone过热降频问题?thermalmonitordDisabler完整指南
  • 主成分分析十年演进