C++子字符串搜索 - 跳入C++

C++ substring searching - JUMPING INTO C++

本文关键字:C++ 跳入 字符串 搜索      更新时间:2023-10-16

我正在读Alex Allain的"Jumping Into C++"。我正在讨论字符串和搜索字符串的一章,但我真的不明白这个 for 循环。有人请向我解释这是如何工作的。谢谢。

for ( i = input.find( "cat", 0 ); i != string::npos; i = input.find( "cat", i ) )
{
    cat_appearances++;
    i++; // Move past the last discovered instance to avoid
    // finding same string again
}
    cout << "The word cat appears " << cat_appearances << " in the string
    " << '"' << input << '"';
}

它具有与每个for循环相同的结构:

for (initialise once; compare before each iteration; post iteration)

但通常你会看到这样的东西

for (int i = 0; i < 5; i++)

即:初始化i = 0一次,然后在循环的每次迭代之前检查是否i < 5,然后在之后执行i++

相反,你的初始化i find("cat", 0)的结果:也就是说,它在字符串input中找到"cat"的第一个出现。

在每个循环之前,它会检查该i != std::string::npos;也就是说,它检查以确保我们确实在input中找到了"cat"的出现,因为如果没有找到出现find,它将返回std::string::npos

在每个循环结束时,它将i = input.find("cat", i),这将再次搜索从我们当前位置开始出现的"cat"。

实际循环本身只是计算发生次数。