проблема стека: хотите проверить, правильно ли указано выражение в скобках, а также балансировка и сопоставление - PullRequest
0 голосов
/ 05 декабря 2018
#include<stdio.h>
#include<string.h>

int stack[20];
int top=-1;
void push(int x)
{
    stack[top]=x;
    top++;
}

int pop()
{
    return stack[top--];
}

int checkmatching(char a[])
{
    int i=0,j=top;
    int count = top;
    while(i+1<=count)
    {
        if(strcmp(a[i],a[j])==0)
        {
            pop(a[i]);
            pop(a[j]);
            i++;
            j--;
        }
        else return -1;
    }
   return 1;
}

int main()
{
    char exp[20],i,m;
    printf("give the expression: ");
    scanf("%s", &exp);
    for(i=0;exp[i]!='\0';i++)
    {
        push(exp[i]);
    }
    m=checkmatching(exp);
    if(m>0)
        printf("matched");
    else printf("no match");
  return 0;
}

У меня есть предупреждение для этого кода:

| 21 | предупреждение: передача аргумента 1 'strcmp' делает указатель из целого числа без приведения | 43 | note: Ожидается 'constchar * 'но аргумент имеет тип' char '| 21 | предупреждение: передача аргумента 2 из' strcmp 'делает указатель из целого числа без приведения || 43 | примечание: ожидается 'const char *', но аргумент имеет тип 'char' |

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

strcmp() сравнивает строки, и вы передаете их символы (обратите внимание, что строка является строкой) вы можете сравнить символы с обычными ==

из краткого обзора, который вы также пытаетесь использоватьпоп с аргументом, и я не уверен, что вы пытаетесь достичь.

вы пытаетесь проверить, является ли истечение палиндрома?зачем использовать для этого стек?очистите свой вопрос, пожалуйста

0 голосов
/ 05 декабря 2018

Не используйте strcmp (), используйте if ().

If(a[i] == a[j])
{
     pop(a[i]);
     pop(a[j]);
     i++;
     j--;
}
0 голосов
/ 05 декабря 2018

Вы сравниваете два char с strcmp (сравнение строк)

Просто сравните символы напрямую:

int checkmatching(char a[])
{
    int i=0,j=top;
    int count = top;
    while(i+1<=count)
    {
        if((a[i] == a[j]))
        {
            pop(a[i]);
            pop(a[j]);
            i++;
            j--;
        }
        else return -1;
    }
   return 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...