69,322
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
ElemType data[MAXSIZE];
int top; //定义栈指针
} SqStack; /*顺序栈类型定义 */
void correct(char *str[], int n)
{
SqStack *s;
char exp[MAXSIZE];
int top = 1; //栈顶指针 为何设置成1?
int i = 0;
int tag = 1;
while(i < n &&) //栈不为空时执行循环
{
if(exp[i] == '(' || exp[i] == '[' || exp[i] == '{')
{
top++;
str[top] = exp[i]; //这里为什么要将 exp[i]赋给数组?
}
if(exp[i] = ')')
if(str[top] == '(')
top--; //出栈
else
tag = 0;
if(exp[i] = ']')
if(str[top] == '[')
top--; //出栈
else
tag = 0;
if(exp[i] = '}')
if(str[top] == '{')
top--; //出栈
else
tag = 0;
if(top > -1)
tag = 0;
return tag;
}
}
string str = "{a+[b+(c-d)]}";
stack<char> sta_ch;
char chTemp = ' ';
char topTemp = ' ';
for(std::size_t idx = 0; idx < str.length(); idx++)
{
chTemp = str[idx];
if((chTemp == '{') || (chTemp == '[') || (chTemp == '('))
{
sta_ch.push(chTemp);
}
else
{
topTemp = sta_ch.top();
if(chTemp == '}')
{
sta_ch.pop();
if(topTemp != '{')
{
cout<<"未匹配"<<endl;
break;
}
}
else if(chTemp == ']')
{
sta_ch.pop();
if(topTemp != '[')
{
cout<<"未匹配"<<endl;
break;
}
}
else if(chTemp == ')')
{
sta_ch.pop();
if(topTemp != '(')
{
cout<<"未匹配"<<endl;
break;
}
}
}
}
if(!sta_ch.empty())
{
cout<<"不匹配"<<endl;
}
else
{
cout<<"匹配成功"<<endl;
}
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define STACK_INIT_SIZE 10
#define STACK_GROW_SIZE 5
#define ELEMTYPE char
#define OK 1
#define ERROR 0
typedef struct { /*建立一个栈的首结点*/
ELEMTYPE * base;
ELEMTYPE * top;
int stacksize;
} SpStack;
int InitStack(SpStack *s) { /*建立空的栈并返回首地址*/
s->base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));
if (!s->base) return ERROR;
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
int StackEmpty(SpStack *s) { /*判断栈是否为空*/
if (s->top==s->base) return OK;
else return ERROR;
}
int Push(SpStack *s,ELEMTYPE e) { /*往栈顶插入元素即进栈*/
if (s->top-s->base>=s->stacksize) { /*判断是否栈满*/
s->base=((ELEMTYPE*)realloc(s->base,(s->stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));
if (!s->base) return ERROR;
s->stacksize+=STACK_GROW_SIZE;
s->top=s->base+s->stacksize;
}
*s->top++=e;
return OK;
}
int Pop(SpStack *s,ELEMTYPE *e) { /*让栈顶元素依次输出即出栈*/
if (StackEmpty(s)) return ERROR;
*e=*(--s->top);
return OK;
}
int Comp(ELEMTYPE a,ELEMTYPE b) {
if ((a=='('&&b!=')')
||(a=='['&&b!=']')
||(a=='{'&&b!='}')) {
return ERROR;
} else return OK;
}
int Count(SpStack *s) {
ELEMTYPE e[STACK_INIT_SIZE*2];
ELEMTYPE e1;
int i;
InitStack(s);
fgets(e,STACK_INIT_SIZE*2,stdin);
if ('\n'==e[strlen(e)-1]) e[strlen(e)-1]=0;
printf("%s\n",e);
for (i=0;e[i]!='\0';i++) {
switch (e[i]) {
case '(':
case '[':
case '{':
Push(s,e[i]);
break;
case ')':
case ']':
case '}':
if (StackEmpty(s)) {
printf("%*s↖右括号多余\n",i+1,"");
return(ERROR);
} else Pop(s,&e1);
if (!Comp(e1,e[i])) {
printf("%*s↖左右匹配出错\n",i+1,"");
return(ERROR);
}
}
}
if (!StackEmpty(s)) {
printf("%*s↖左括号多余\n",i,"");
return(ERROR);
} else {
printf("匹配正确\n");
return(OK);
}
}
void main() {
SpStack s;
Count(&s);
free(s.base);
}
#include <stdio.h>
#include <string.h>
int main()
{
char* input = "{a+[b+(c+d)]}";
char* sep = "{}()[]";
char* pos = input;
char res[16] = {0}, cnt = 0;
//把出现的括号依次保存到res
do {
pos = strpbrk(pos, sep);
if(pos)
{
res[cnt++] = *pos;
++pos;
}
} while (pos != NULL);
//不匹配
if(cnt & 1)
{
puts("not matched");
}
else
{
//res如果对称,则匹配, 未完成,请补充
puts(res);
}
return 0;
};