ここでは、文字列の中括弧のみをフィルタリングして配列に格納するスタックを実装しようとしています。私が書いたコードは、stackArr
の配列に値を格納しました。しかし、私が配列を出力しようとするたびに、私のコードは失敗します。特定のエラーメッセージは表示されず、実行に失敗します。char配列に格納されている値を読み取る方法は?
私はこの問題は、以下の部分であると思う:
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'は' char'へのポインタを与えません。これは10個の 'char'要素の*配列*へのポインタを与えます。とても違う。また、関数を呼び出す前に関数プロトタイプ宣言を作成したことが記憶されていれば、コンパイラはあなたのためにキャッチしていたはずです。今のように警告を受けるべきです。 –
@dasblinkenlightは "[{}]"のようなユーザー入力を提供しました –