我有一个太长的字符串,我想查找并找到所有需要的单词。例如,我想查找字符串中所有“苹果”的位置。你能告诉我我是怎么做到的吗? 谢谢在字符串中查找所有想要的单词
回答
重复应用std::string::find
如果您使用的是C++字符串,或者std::strstr
如果您使用的是C字符串;在这两种情况下,在每次迭代中,在最后一次匹配后开始搜索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)
这不会找到重叠的匹配 - 例如对于模式眼睛和眼睛线眼睛而言,迄今为止给出的所有答案只能找到第一个出现。 – 2012-07-06 13:12:49
我认为如果匹配在字符串的末尾,就会中断。如果'str'会以'apple'结尾。在这种情况下,你可以调用'std :: string :: find(search,pos);',其值'pos'等于'size()'。不确定这是否允许。 – 2012-07-06 13:18:32
@IvanVergiliev:如果这是你想要的,取决于你想用这个函数实现什么规范(这两个规范都有有效的用例);仍然,所有需要的是将'pos + = ...'改为'pos ++'。 – 2012-07-06 18:55:27
使用一个循环反复调用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;
}
void findApples(const char* someString)
{
const char* loc = NULL;
while ((loc = strstr(someString, "apple")) != NULL) {
// do something
someString = loc + strlen("apple");
}
}
鉴于qustion是关于C++的,我会考虑一个关于'std :: string'的回答更合适。 – 2012-07-06 13:01:01
- 1. indexOf在字符串中查找所有出现的单词
- 2. 查找字符串中的单词词
- 3. 如何查找字符串中所有最长的单词?
- 4. 查找字符串中的单词
- 5. 查找字符串中的所有连续字词组
- 6. 检查列表包含在字符串中的所有单词
- 7. MongoDB - 在多个字段中查找所有搜索字符串单词
- 8. 字符串查找单词的Javascript
- 9. 想要除去单词中第一个字符以外的所有字符
- 10. 如何找到字符串中的C#的所有单词
- 11. 查找字符串中的2个预定字词之间的所有字符
- 12. 在vba词中查找单词后插入字符串
- 13. 查找单词和分割字符串
- 14. 查找匹配多个数组键的字符串中的所有单词
- 15. 查找字符串中没有空格的单词PHP
- 16. 查找字符串中特定单词字符的索引号
- 17. 如何在字符串句子中查找带有特殊字符的单词
- 18. Regexmatch查找匹配多个单词的所有字符串单元
- 19. 如何查找字符串中所有单词的出现次数
- 20. 用于查找字符串中所有单词的Python正则表达式
- 21. 如何使用Python查找所有输入字符串中的单词?
- 22. PHP查找字符串中特定单词的所有出现位置
- 23. 查找一个文件中以修复字符串开头的所有单词?
- 24. 如何查找只有大写字母的单词(字符串)?
- 25. 如何在java中查找字符串中的整个单词
- 26. 在Java中查找字符串中的最小单词
- 27. 在java中查找字符串中的最小单词
- 28. 替换utf8中的所有非单词字符字符串
- 29. 在字符串中查找单个或多个单词
- 30. 查找字符串包含所有词语的阵列
查找到的boost ::正则表达式,如果你需要匹配更复杂的东西。否则,坚持Frerich Raabe的回答。 – 2012-07-06 13:02:36