私は以下を持っています:
int findPar(char* str)
{
int counter=0;
while (*str)
{
if(str[0] == "(") <---- Warning
{
counter++;
}
else if (str[0]== ")") <---- Warning
{
counter--;
}
if (counter<0)
{
return 0;
}
str++;
}
if (counter!=0)
{
return 0;
}
return 1;
}
私が受け取る警告は、intとcharの比較です。
私は次のようにstrcmpでも比較を試みました(文字列の最初の文字と指定された文字の比較)。
if (strcmp(str, ")")==0) { stuff }
しかし、比較が正しいはずですが、それが「もの」になることはありません。
どうすればいいですか?
str
がC文字列(nullで終了する文字の配列)の場合、str[0]
はcharです。
引用のタイプが重要であることに注意してください! ')'
は文字ですが、")"
は文字列です(つまり、')'
charの後にnullターミネータが続きます)。
したがって、2つの文字を比較できます。
str[0] == ')'
または、2つの文字列を比較できます
strcmp(str, ")") == 0
当然、(2番目はstr
文字列が実際にその括弧のみを含む場合に機能します)。
文字(str[0]
)とconst char[N]
("whatever"
)を比較しています。二重引用符は文字配列を表すので、一重引用符は単一文字を表すため、一重引用符を使用する必要があります。
if (str[0] == ')') // or *str == ')'
等。
strcmp
も失敗した理由は、文字列が)
を指すこともあるが、それ以上の文字が含まれている(つまり、直後に'\0'
が続いていない)ため、文字列は同等ではないためです1文字の文字列")"
に変更します。
二重引用符、_"
_は文字列の区切り文字であるため、_")"
_はif(str[0] == "(")
の文字列リテラルへのポインターです。文字と比較したいので、一重引用符を使用する必要があります
_if(str[0] == '(')
_
if (str[0] == ')')
などが必要です。文字リテラルを示すには、単一引用符(アポストロフィ)に注意してください。