9

私は次のものを持っています:

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 }

しかし、比較が正しい (はずの) 場合でも、「もの」にはなりません。

どうすればいいですか?

4

4 に答える 4

20

strが C 文字列 (null で終わる char の配列) の場合、はstr[0]char です。

引用符のタイプが重要であることに注意してください。')'は char です")"が、 は文字列です (つまり、')'char の後に null ターミネータが続きます)。

したがって、2 つの文字を比較できます。

str[0] == ')'

または、2 つの文字列を比較することもできます

strcmp(str, ")") == 0

当然のことながら (2 番目は、str文字列に実際にその括弧のみが含まれている場合に機能します)。

于 2012-05-07T23:47:41.293 に答える
7

str[0]文字 ( ) とconst char[N]( ) を比較しています"whatever"。二重引用符は文字配列を表し、一重引用符は単一文字を表すため、一重引用符を使用する必要があります。

if (str[0] == ')') // or *str == ')'

等。

同様に失敗した理由strcmpは、ある時点で文字列が を指している間)、それよりも多くの文字がある (つまり、直後に a が続かない'\0') ため、文字列が 1 文字の文字列と同等ではないため")"です。

于 2012-05-07T23:46:41.303 に答える
2

二重引用符"は文字列区切り文字であるため")"、 の文字列リテラルへのポインターif(str[0] == "(")です。文字と比較したいので、一重引用符を使用する必要があります

if(str[0] == '(')
于 2012-05-07T23:46:37.720 に答える
1

等が必要ですif (str[0] == ')')。文字リテラルを示す単一引用符 (アポストロフィ) に注意してください。

于 2012-05-07T23:46:48.760 に答える