Здесь я пытаюсь реализовать стек, где только отрывные фигуры из строки будут отфильтрованы и сохранены в массиве. Код, который я написал, сохранил значения в массиве stackArr
. Но всякий раз, когда я пытаюсь распечатать массив, мой код не работает. Он не дает никакого конкретного сообщения об ошибке, он просто не выполняется.Как читать значения, хранящиеся в массиве символов?
Я думаю, что проблема заключается в следующем участке:
i = 0;
while(stackArr[i] != '\0')
{
printf("%c ",stackArr[i]);
i++;
}
Полный код:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char braces[10];
char stackArr[10];
int front = -1,rear = -1,size = 10;
gets(braces);
checkValidate(&braces,&stackArr,&front,&rear,size);
}
void checkValidate(char *braces,char *stackArr,int *front,int *rear,int size)
{
int i = 0;
while(braces[i] != '\0')
{
if((braces[i] == '(') || (braces[i] =='{') || (braces[i] =='['))
{
push(braces[i],&stackArr,&front,&rear,size);
}
i++;
}
//print(&front,&rear,size,*stackArr);
i = 0;
while(stackArr[i] != '\0')
{
printf("%c ",stackArr[i]);
i++;
}
}
void push (char val,char *stackArr,int *front,int *rear,int size)
{
if(isFull(*front,*rear,size))
{
printf("your string is larger that valid size\n");
}
else
{
if(isEmpty(*front,*rear))
{
*front = 0;
}
*rear = (*rear+1) % size;
stackArr[*rear] = val;
/*printf("%d ",*rear);
printf("%c",stackArr[*rear]);
printf("\n");*/
}
}
int isEmpty(int front,int rear)
{
if(front == -1 && rear == -1)
{
return 1;
}
else
{
return 0;
}
}
int isFull(int front,int rear,int size)
{
if(front == 0 && rear == size -1)
{
return 1;
}
else
{
return 0;
}
}
void print(int *front,int *rear,int size,char *arr)
{
int i;
for(i = *rear;i != *front; i = (i-1)% size)
{
printf("%c\n",arr[i]);
}
printf("%c\n",arr[i]);
}
Какие данные вы вводите в качестве входных данных? – dasblinkenlight
Выражение '& braces' does * not * дает вам указатель на' char', он дает указатель на * массив * из десяти элементов 'char'. Очень разные. И что-то, что компилятор должен был поймать за вас, если вы только запомнили создать объявление прототипа функции, прежде чем вы вызвали функцию. Как и сейчас, вы все равно должны получать предупреждения. –
@dasblinkenlight предоставил пользовательский ввод типа "[{}]" –