🔤 C5-3 字符串模拟与输出调试

知识点体系逻辑图 · 陶老师 C++ 编程课堂

🎯 字符串模拟与输出调试
C5模拟法系列第三讲 · 四大知识模块
📝

模块一:字符串操作函数

  • s.size():获取字符串长度
  • s[i]:访问第i个字符(从0开始)
  • s.substr(i, len):截取子串
  • s.replace(i, len, str):替换子串
  • s.find(p):查找子串位置
🔍

模块二:字符串上的模拟

  • 有重叠子串计数:找到后i++继续找
  • 无重叠子串计数:找到后i+=m跳过
  • 开心消消乐:replace消除连续相同字符
  • 字符遍历:for循环逐个处理字符
🔧

模块三:语法问题与编译错误

  • expected '}':缺少右括号
  • not declared in scope:变量未声明/缺头文件
  • 错误定位特点:报错位置可能不准
  • 配对练习:错误信息↔错误原因
🐛

模块四:逻辑错误与输出调试

  • 编译通过≠正确:逻辑错误运行才暴露
  • 输出调试法:cout打印中间变量
  • 质数的和:调试循环范围
  • 隐藏敏感信息:find+replace模拟

📌 核心语法速查

// 字符串操作四件套 #include <iostream> #include <string> using namespace std; int main() { string s = "hello"; cout << s.size() << endl; // 5 cout << s[0] << endl; // h cout << s.substr(0,3) << endl; // hel s.replace(0, 3, "HE"); cout << s << endl; // HElo return 0; }

⚖️ 有重叠 vs 无重叠 对比

对比项有重叠计数无重叠计数
找到一个子串后i++(继续下一位)i += m(跳过m位)
s="aaaa", p="aa"结果=3结果=2
循环写法for正常i++for+手动i+=m
典型应用统计出现次数消消乐、替换

🔄 字符串模拟解题流程

第1步:明确模拟目标(计数?替换?消除?)
↓
第2步:确定遍历方式(逐个字符扫描 or 滑动窗口)
↓
第3步:用substr截取窗口子串进行比较
↓
第4步:根据规则更新(计数++ / replace替换 / i+=m跳过)
↓
第5步:输出结果,用cout调试中间步骤
🧭 C5-3 课程导航
📖 课程学习 🧠 知识点回顾 📝 随堂练习 🎮 课后拓展 💻 代码填空 🔒 拓展解析 🏆 OJ练习