【问题标题】:Searching for occurrence of a string using c++使用c ++搜索字符串的出现
【发布时间】:2011-02-22 19:25:58
【问题描述】:

我需要在一个字符串中找到一个字符串的出现。 c++中有查找函数吗?例如,如果我有一个字符串example/example/example/a/a,如何获取字符串example的出现次数,在这种情况下是3?

【问题讨论】:

  • 接受您之前问题的一些答案。
  • “eee”匹配“eeee”一次还是两次?
  • 这听起来像是家庭作业?
  • 所以没有人会为此提供帮助???
  • @ZacHowland:是的,确实如此。除了学生之外,没有人需要搜索子字符串。

标签: c++ algorithm string stl substring


【解决方案1】:

是的,有一个函数可以查找字符串中的内容。 ;-)

您可以通过查看std::string API找到这个和更多:

http://www.cplusplus.com/reference/string/string/

【讨论】:

  • h=example/example/example/a/a;int c=0; while(h.find("example")!=NULL) { c=c+1; cout<<c<<endl; } 这失败了我可以知道吗???
  • 每次你发现它从字符串 h 的开头开始,如果没有找到它,它也会返回字符串的位置或 npos,而不是指针,所以 NULL 比较是不正确的。有一个可选参数 pos 确定要搜索的起始位置,由于查询返回先前找到的搜索的位置,所以只要 find 直到它返回 npos。
【解决方案2】:

使用子字符串函数。

  std::string to_search = "example/example/example/a/a";
  std::string to_find = "example";

  int count = 0;
  for (int i = 0; i < to_search.length() - to_find.length(); i++) {
    if (to_search.substr(i, to_find.length()) == to_find)
      count++;
  }

【讨论】:

  • 考虑使用std::equal 来避免创建大量临时字符串。 (这仍然不是最佳的,但会更好)
  • 搜索子字符串的效率很低。提示:一次可以跳过多个字符。
  • 这不应该是有效的。我只是为一个简单的问题提供了一个简单的解决方案。当然,使用迭代器有更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
相关资源
最近更新 更多