我有一个太长的字符串,我想找到并定位所有想要的单词。例如,我想查找字符串中所有“apple”的位置。你能告诉我我是怎么做到的吗?谢谢
问问题
4702 次
3 回答
4
std::string::find
如果您使用的是 C++ 字符串,或者您使用的是 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;
}
(链接)
于 2012-07-06T12:53:55.687 回答
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;
}
于 2012-07-06T12:54:36.620 回答
0
void findApples(const char* someString)
{
const char* loc = NULL;
while ((loc = strstr(someString, "apple")) != NULL) {
// do something
someString = loc + strlen("apple");
}
}
于 2012-07-06T12:58:06.603 回答