在字符串中查找所有想要的单词

时间:2012-07-06 12:51:43

标签: c++ string search

我有一个太长的字符串,我想找到并找到所有想要的单词。例如,我想找到字符串中所有“apple”的位置。你能告诉我我是怎么做到的吗? 感谢

3 个答案:

答案 0 :(得分:4)

如果您使用C ++字符串,则重复应用std::string::find;如果您使用C字符串,则重复应用std::strstr;在这两种情况下,每次迭代开始在最后一次匹配后搜索n个字符,其中n是你的单词的长度。

std::string str="one apple two apples three apples";
std::string search="apple";
for(std::string::size_type pos=0; pos<str.size(); pos+=search.size())
{
    pos=str.find(search, pos);
    if(pos==std::string::npos)
        break;
    std::cout<<"Match found at: "<<pos<<std::endl;
}

link

答案 1 :(得分:2)

使用重复调用std::string::find的循环;在每次迭代中,你开始发现超越你的最后一击:

std::vector<std::string::size_type> indicesOf( const std::string &s,
                                               const std::string &needle )
{
  std::vector<std::string::size_type> indices;
  std::string::size_type p = 0;
  while ( p < s.size() ) {
    std::string::size_type q = s.find( needle, p );
    if ( q == std::string::npos ) {
      break;
    }
    indices.push_back( q );
    p = q + needle.size(); // change needle.size() to 1 for overlapping matches
  }
  return indices;
}

答案 2 :(得分:0)

void findApples(const char* someString)
{
   const char* loc = NULL;
   while ((loc = strstr(someString, "apple")) != NULL) {
      // do something
      someString = loc + strlen("apple");
   }
}