文字列(単語)から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 ステートメントが実行されます。
文字列(単語)から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 ステートメントが実行されます。
の戻り値の型std::string::find()
は unsigned 型であり、文字が見つからない場合は(表現できる最大値)、または文字列内で見つかった文字の最初のインデックスをstd::string::size_type
返します。std::string::npos
std::string::size_type
std::string::find()
ここで、 の結果をと比較していますtrue
。これにより、ブール値true
が整数値に整数昇格されます1
。したがって、文字expected_char
が位置 1 にある場合 (つまり、文字列の 2 番目の文字である場合) にのみ、条件が満たされます。
expected_char
文字が文字列に含まれているかどうかを確認する場合はword
、使用します
if (word.find(expected_char) != std::string::npos)
{
...
}
これを見て、あなたは理解するでしょう。興味深い部分:
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';
find
npos
位置を返し、一致しない場合は特別な値を返します。テストする必要があります:
word.find(expected_char) != word.npos
(b
が位置 1 にあることもあり、これは の整数値でもありtrue
ます。)