私があなたを正しく理解しているなら、あなたが必要とするのは次のことです
size_t drawHangman( const std::string &word, char c )
{
static size_t wrongTries = 0;
if ( word.find( c ) != std::string::npos )
{
return ( wrongTries = 0 );
}
else
{
return ( ++wrongTries );
}
}
wrongTries をリセットする必要がある場合は、次のように任意の値で i を呼び出すことができます。
drawHangman( " ", ' ' );
上記で示した方法で関数を呼び出して wrongTries をリセットしたくない場合は、次の方法で定義できます。
size_t drawHangman( const std::string &word = " ", char c = ' ' )
{
static size_t wrongTries = 0;
if ( word.find( c ) != std::string::npos )
{
return ( wrongTries = 0 );
}
else
{
return ( ++wrongTries );
}
}
そして、あなたはそれを単に次のように呼び出すことができます
drawHangman();
wrongTries をリセットします。
大文字と小文字を区別しない検索が必要な場合は、標準のアルゴリズムを使用できますstd::find_if
。例えば
#include <algorithm>
size_t drawHangman( const std::string &word, char c )
{
static size_t wrongTries = 0;
suto it = std::find_if( word.begin(), word.end(),
[=]( char t ) { return ( std::toupper( t ) == std::toupper( c ) ); } );
if ( it != word.end() )
{
return ( wrongTries = 0 );
}
else
{
return ( ++wrongTries );
}
}
一方、文字列に文字が存在しない場合にすべてのケースをカウントする必要がある場合は、次の方法で関数を記述できます。
int drawHangman( const std::string &word = "", char c = '\0' )
{
static int wrongTries = 0;
if ( word.empty() )
{
wrongTries = 0;
return wrongTries;
}
if ( word.find( c ) != std::string::npos )
{
return ( -wrongTries );
}
else
{
return ( ++wrongTries );
}
}
したがって、次の方法で文字列に文字が存在するかどうかを確認できます
if ( drawHangman( SomeString, SomeChar ) <= 0 )
{
// the character is found in the string
}
else
{
// the character is not found in the string
}
そして、wrongTries をリセットする必要がある場合は、関数を次のように呼び出すことができます。
drawHangman();