C ++:string.find仅在字符串pos1上找到字符串中的字符

时间:2013-02-18 17:59:54

标签: c++

我希望通过

在字符串(word)中找到char(expected_char)
if (word.find(expected_char)==true)
{
    cout << "You got one! It's on pos" << word.find(expected_char);
}
else
{
...
}

如果我的字符串是例如“abcd”,我搜索“c”,否则将被执行;如果我搜索“b”,则会执行if语句。

3 个答案:

答案 0 :(得分:5)

std::string::find()的返回类型是无符号类型std::string::size_type,如果字符为std::string::npos,则返回std::string::size_typestd::string::find()可以表示的最大值)找不到,或者是字符串中找到的字符的第一个索引。

现在,您要将true的结果与true进行比较,从而将布尔值1整体提升为整数值expected_char。因此,当且仅当在位置1中找到字符expected_char时(即,当它是字符串中的第二个字符时),您的条件才会得到满足。

如果您想检查字符word是否在字符if (word.find(expected_char) != std::string::npos) { ... } 中,请使用

{{1}}

答案 1 :(得分:5)

请参阅this,您就会明白。有趣的部分:

  std::string str("There are two needles in this haystack with needles.");
  std::string str2("needle");

  unsigned found = str.find(str2);
  if (found != std::string::npos)
    std::cout << "first 'needle' found at: " << found << '\n';

答案 2 :(得分:4)

find返回一个位置,如果没有匹配则返回特殊值npos。你需要测试:

word.find(expected_char) != word.npos

(恰好b位于第1位,这也是true的整数值。)