【问题标题】:find vs find_first_of when searching for empty string搜索空字符串时的 find vs find_first_of
【发布时间】:2015-06-08 01:54:15
【问题描述】:

在 STL 中,当我执行 s.find("") 时,它返回 0 而 s.find_first_of("") 返回 -1 (npos)。造成这种差异的原因是什么?

【问题讨论】:

  • 我希望 s.find(""); 返回 0 (并且它使用我方便的实现来实现)。例如:coliru.stacked-crooked.com/a/3d5a6076bde75e28
  • 真的。感谢您指出了这一点。对问题进行了更改。还是不解释区别

标签: c++ string stl


【解决方案1】:

s.find(t)s 中查找子字符串t 的第一次出现。如果t 为空,则该事件位于s 的开头,s.find(t) 将返回 0。

s.find_first_of(t)t 中查找其中一个字符 的第一次出现。如果t是空字符串,那么t中没有字符,所以找不到出现,find_first_of会返回npos

Live on ideone.

【讨论】:

  • 但字符串的开头没有“”。它有“a”对吗?就像你的例子一样。 s.find("') 也应该返回 -1 吗?
  • @littlecegian: "" 由零个字符组成,并且在任何字符串的开头肯定有一个长度为 0 的子字符串。 (如果还有其他位置的话,还有一个长度为 0 的子字符串从字符串中的每个其他位置开始,但位置 0 的那个是最左边的那个。)
  • 如果是这种情况,find_first_of 也应该返回 0,因为在 "" 中的所有字符中,空字符串是搜索时返回 0 的字符。对吗?
  • @littlecegian:正如我在答案中所说,空字符串中没有字符,因此在目标中找不到字符串中的任何字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 2013-07-16
  • 1970-01-01
相关资源
最近更新 更多