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。不过,当短语.substr(7,4(将返回大小为3或更小的子字符串时,代码可能会出现意外行为。在这种情况下,可能会出现这样的情况:文本变量的后缀等于搜索到的模式,但由于"-3"部分而找不到它。