首页 > 解决方案 > 使用 .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 整数部分,是否会出现代码不起作用的情况...

标签: c++stringcomparison

解决方案


for 循环中的“-3”部分代表文本变量中最后几个不合适的后缀。如果您正在搜索大小为 4 的模式,则检查后缀 'r'、'er' 等是否有效是没有意义的,因为它们的大小不是 4。尽管您的代码可能表现出意外的情况是当 phrase.substr(7, 4) 将返回大小为 3 或更小的子字符串时。在这种情况下,可能会出现文本变量的后缀等于搜索到的模式的情况,但由于“-3”部分而无法找到它。


推荐阅读