c++ - 使用 .substr() 比较字符串
问题描述
std::string text {"Peter Piper picked a peck of pickled pepper."};
std::string phrase {"Got to pick a pocket or two."};
for (size_t i{}; i < text.length() - 3; ++i)
if (text.substr(i, 4) == phrase.substr(7, 4))
std::cout << "text contains " << phrase.substr(7, 4)
<< " starting at index " << i << std::endl;
我知道为什么 -3 写在
size_t i{}; i < text.length() - 3; ++i
因为这是搜索字符串“pick”的最大搜索次数。但是写出来不是更好吗
size_t i{}; i < text.length(); ++i
没有-3 ...这将使代码更加灵活,您可以输入任何您想要的文本,string phrase
而不必担心for循环中的-ve整数部分...我就是这样做并删除了-3部分,它搜索得很好。如果我删除 -ve 整数部分,是否会出现代码不起作用的情况...
解决方案
for 循环中的“-3”部分代表文本变量中最后几个不合适的后缀。如果您正在搜索大小为 4 的模式,则检查后缀 'r'、'er' 等是否有效是没有意义的,因为它们的大小不是 4。尽管您的代码可能表现出意外的情况是当 phrase.substr(7, 4) 将返回大小为 3 或更小的子字符串时。在这种情况下,可能会出现文本变量的后缀等于搜索到的模式的情况,但由于“-3”部分而无法找到它。
推荐阅读
- javascript - 使用 d3.js scale ordinal 返回不在域中的项目的默认颜色
- javascript - 带有当前位置和标记位置的网页上的地图
- node.js - GCP Cloud Function & BigQuery:插入行但所有列均为空
- php - Woocommerce 模板和 CSS 问题
- c++ - C++17
模板参数扣除不适用于 Xcode 10.1 - python-3.x - 寻找 Lambda 函数以根据文件类型将文件移动到不同的 S3 存储桶
- scala - Apache Spark - 实现分布式四叉树
- java - 通过 Selenium 3 启动 Edge 浏览器时出错
- css - 控制 Flexbox 代码中溢出的意外行为
- unity3d - 在 Unity 3D 中为对象分配编号