关于栈的有关问题。求帮忙
关于栈的问题。。。求帮忙
为什么在英文状态下,当我输入 ( 时就不可以,输入 { 和 [ 时就可以判断,( 不是ASCLL码相差1吗?我写的有错吗?
StackNode *Push(StackNode *top,char string[MAXSIZE]){
StackNode *p,*q;
int i;
char item,s;
for(i=0;i<MAXSIZE;i++)
{
s=string[i];
if((s=='{')||(s=='(')||(s=='[')) //遇到这三个就进栈。
{
item=s;
p=(StackNode *)malloc(sizeof(StackNode));
p->next=NULL;
p->data=item;
p->next=top;
top=p;
}
if((s=='}')||(s==')')||(s==']'))
{
if((int)s==(int)top->data+1||(int)s==(int)top->data+2) //如果相等栈顶出栈并指向下一个。
{
q=(StackNode *)malloc(sizeof(StackNode));
q->next=NULL;
q=top->data;
top=top->next;
free(q);
}
else
return top;
}
}
return top;
};
int main(){
StackNode *top;
int i,k;
char string[MAXSIZE];
top=InitStack(top);
CreatStack(top);
printf("请输入带{ ( [的%d个字符的字符串:",MAXSIZE);
for(i=0;i<MAXSIZE;i++)
scanf("%c",&string[i]);
getchar();
top=Push(top,string);
if(top==NULL)
{
for(i=0;i<MAXSIZE;i++)
printf("%c",string[i]);
printf("符号平衡.\n");
}
else
{
for(i=0;i<MAXSIZE;i++)
printf("%c",string[i]);
printf("符号不平衡.\n");
}
return 0;
}
------解决方案--------------------
全角/半角状态?
为什么在英文状态下,当我输入 ( 时就不可以,输入 { 和 [ 时就可以判断,( 不是ASCLL码相差1吗?我写的有错吗?
StackNode *Push(StackNode *top,char string[MAXSIZE]){
StackNode *p,*q;
int i;
char item,s;
for(i=0;i<MAXSIZE;i++)
{
s=string[i];
if((s=='{')||(s=='(')||(s=='[')) //遇到这三个就进栈。
{
item=s;
p=(StackNode *)malloc(sizeof(StackNode));
p->next=NULL;
p->data=item;
p->next=top;
top=p;
}
if((s=='}')||(s==')')||(s==']'))
{
if((int)s==(int)top->data+1||(int)s==(int)top->data+2) //如果相等栈顶出栈并指向下一个。
{
q=(StackNode *)malloc(sizeof(StackNode));
q->next=NULL;
q=top->data;
top=top->next;
free(q);
}
else
return top;
}
}
return top;
};
int main(){
StackNode *top;
int i,k;
char string[MAXSIZE];
top=InitStack(top);
CreatStack(top);
printf("请输入带{ ( [的%d个字符的字符串:",MAXSIZE);
for(i=0;i<MAXSIZE;i++)
scanf("%c",&string[i]);
getchar();
top=Push(top,string);
if(top==NULL)
{
for(i=0;i<MAXSIZE;i++)
printf("%c",string[i]);
printf("符号平衡.\n");
}
else
{
for(i=0;i<MAXSIZE;i++)
printf("%c",string[i]);
printf("符号不平衡.\n");
}
return 0;
}
------解决方案--------------------
全角/半角状态?