在另一个字符串中查找字符串的所有实例

Find all instances of string in anotherstring

下面我有一段比较两个字符串的代码。

if (long.find(short) != string::npos) {
        cout << "FOUND";
}

这只告诉我它是否在长字符串中找到了短字符串。但是我怎样才能找到所有的实例并告诉用户字符串的这些实例显示在哪里呢?

我想也许可以将其设为一个循环,但我无法实现它。

find 的重载之一允许您告诉它从哪里开始查找。因此,在找到一个匹配项后,再次调用 find(),之前的位置加一。

这里是示例实现:

#include<iostream>
#include<string>

int main() 
{
   std::string long_str ("abcabcabcabc");
   std::string short_str("abc"); 
   while( true)
   {
      std::size_t found = long_str.find(short_str);
      if (found == std::string::npos)
        break;
      long_str = long_str.substr(found+short_str.length());
      std::cout<<long_str<<"\n";
   }
}

输出:

abcabcabc

abcabc

abc

你可以这样做

#include <iostream>
#include <string>

int main()
{
    std::string test = "we are searching for searching here";
    std::string str = "searching";
    std::string::size_type start = test.find(str); // find the first instance
    while(start != std::string::npos) // repeat for the rest
    {
        std::cout << "Found on pos: " << start << std::endl;
        start = test.find(str, start + 1);
    }
}

旁注:不要使用 longshort 作为字符串名称,因为它们是 C++ 保留关键字。