查找给定字符串中所有子字符串的出现次数

时间:2014-03-11 03:14:53

标签: c++ string

我使用简单的字符串函数strstr来查找文本中第一次出现刺痛。我使用以下代码来计算文本中唯一单词的数量。

for(int i=0;i<24;i++)
      {
              if(strstr(text,ops[i]))
              {                
                      op++;
              }

      }

但我想找到程序中所有子字符串的出现。我可以在JAVA中轻松完成。但我被要求用C ++做这件事。有什么帮助吗?

2 个答案:

答案 0 :(得分:10)

strstr()用于C风格的字符串,如果你真的使用C ++,std::string并且它的成员函数会更方便。

#include <string>
#include <iostream>

using namespace std;

int main()
{
    string s("hello hello");
    int count = 0;
    size_t nPos = s.find("hello", 0); // first occurrence
    while(nPos != string::npos)
    {
        count++;
        nPos = s.find("hello", nPos + 1);
    }

    cout << count;
};

答案 1 :(得分:3)

您可以使用std :: string查找方法之一,这将更容易(也更安全),但如果您确实需要使用strstr:

int _tmain(int argc, _TCHAR* argv[])
{           
    const char test[] = "this test is a test";
    const char subStr[] = "test";
    const char* pCurrent = strstr( test, subStr );
    while( pCurrent != NULL )
    {
        std::cout << "found" << std::endl;
        pCurrent++;
        pCurrent = strstr( pCurrent, subStr );
   }
   return 0;
}

这只会增加找到最后一个子字符串的点。请注意,您应该执行正常的字符串长度,NULL和安全检查。