栈的括号匹配 编写一个C++程式,解决括号匹配问题,即匹配一个字串中的左右括号.
编写一个C++程式,解决括号匹配问题,即匹配一个字串中的左右括号.

编写一个C++程式,解决括号匹配问题,即匹配一个字串中的左右括号.
#include <iostream>using namespace std;#define STACK_INT_SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0typedef char SElemType;typedef int Status;typedef struct { SElemType *base; SElemType *; int stacksize;}SQStack;Status INitStack(SQStack &S){ S.base=new SElemType[STACK_INT_SIZE]; if(!S.base) { cout<<"获取记忆体失败!"<<endl; exit(ERROR); } S.=S.base; S.stacksize=STACK_INT_SIZE; return OK;}Status PushStack(SQStack &S,SElemType e){ if(S.-S.base>=S.stacksize) { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) { cout<<"获取记忆体失败!"<<endl; exit(ERROR); } S.=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.++=e; return OK;}Status Get(SQStack S){ SElemType e; if(S.base==S.) { return ERROR; } e=*(S.-1); return e;}Status popStack(SQStack &S){ if(S.==S.base) { cout<<"已经是最后一个元数了!"; return ERROR; } --S.; return OK;}Status emptyStack(SQStack S){ if(S.base==S.) return ERROR; return OK;}Status Inputbraces(SQStack &S){ SElemType e; cout<<"输入括号,输入任何不是括号的字元则表示输入结束"<<endl; while(true) { cin>>e; if(e!='('&&e!=')'&&e!='['&&e!=']'&&e!='{'&&e!='}') { cout<<"输入结束,下面将判断括号是否匹配!"<<endl; break; } if((e==')'&&Get(S)=='(')||(e==']'&&Get(S)=='[')||(e=='}'&&Get(S)=='{')) popStack(S); else PushStack(S,e); } return OK;}Status main(){ SQStack S; INitStack(S); Inputbraces(S); if(emptyStack(S)) { cout<<"括号不匹配!"<<endl; } else cout<<"括号匹配!"<<endl; return OK;}这是用堆叠写的!如何用c语言编写一个括号匹配程式
#include <iostream.h>
void main()
{
int Token = 0;
char s[50];
bool IsRight = false;
cout<<"please input parenthesis:"<<endl;
cin>>s;
for(int i = 0;s[i]!='';i++)
{
if(s[i]=='('){
Token++;
}
if(s[i]==')'){
Token--;
if(Token<0)
break;
}
}
if(Token!=0)
cout<<"no match!!!";
else
cout<<"match!!";
cout<<'n';
}
c++栈的问题,写个程式解决括号的匹配问题
int Match(char *exp,int n)
{
int i=0;
char e;
SqStack *st;
InitStack(st);
while(i<n)
{
if(exp[i]=='(')
push(st,exp[i]);
else if(exp[i]==')')
{
if(GetTop(st,e)==1)
{
if(e!='(')
return 0;
else
Pop(st,e);
}
else
return 0;
}
i++;
}
if(StackEmpty(st)==1)
return 1;
else
return 0;
}
急!括号匹配问题
你用了exit和malloc函式
需要新增标头档案
#include<stdlib.h>
试过了,新增标头档案后没有编译错误。
函式的 栈引数 都改成 栈指标引数
如:
int initstack(sqstack S);
改成:
int initstack(sqstack *S);
函式体也要做相应修改。
c++ 找错误 (括号匹配问题)
#include<iostream.h>
#include<stdlib.h>
const int maxsize=100;最大元素个数
typedef char Datatype;
class seqstack
{
int ;
Datatype *s;
public:
seqstack();建构函式
~seqstack();解构函式
void push(Datatype x);
void match(char *k);
};
seqstack temp;
seqstack::seqstack()
{
=0;
s=new Datatype[maxsize];
}
seqstack::~seqstack()
{
delete []s;
}
void seqstack::push(Datatype x)
{
if(==maxsize)
{
cout<<"栈满."<<endl;
exit(0);
}
else
{
s[]=x;
}
}
bool ma(char a,char b)
{
if((a=='('&&b==')')||(a=='['&&b==']')||(a=='{'&&b=='}'))
return true;
else
return false;
}
void seqstack::match(char *k)
{
int u,v;
for(int i=0;k[i]!='';i++)
{
if(k[i]=='('||')'||'['||']'||'{'||'}')
{
temp.push(k[i]);
++;
}
}
if(%2==1)
{
cout<<"括号多余"<<endl;
}
else
{
u=/2;
v=u+1;
while(u!=-1)
{
if(ma(s[u],s[v]))
{
u--;
v++;
}
else
{
cout<<"括号不匹配"<<endl;
break;
}
}
if(u==-1)
cout<<"左右括号匹配正确"<<endl;
}
}
void main()
{
char p[10];
cout<<"请输入一个含括号的字串"<<endl;
cin>>p;
temp.match(p);
} 只是修改编译错误吗? 我改好了 ,还修改了个死回圈 ,你少了一边大括号,还有case那加上了break
c++ 如何在档案中匹配一个字串
如果档案不是太大(比你当前的可用剩余记忆体小),且档案中不包含“0”这样的位元组,直接把档案用一个缓冲调进记忆体,然后用字串搜寻函式搜就是了;
如果档案确实太大,或者档案中可能包含“0”这样的位元组,那么你需要自己编写模式匹配函式(就是与字串搜寻函式类似功能的函式,网上有类似的C++原始码,但功能还不够)。
对含0资料的适应比较简单,搜寻函式只要额外加两个缓冲区资料长度的引数传进去就行(代替以0结尾的字串处理机制)——一个主缓冲长度,一个子串长度。
而跨缓冲区的搜寻比较麻烦,因为搜寻字很可能跨在两个相邻缓冲之间,这时搜寻函式需要返回两个资讯:一是搜寻到的子串位置,二是本缓冲区内匹配了多少位元组的子串(完全匹配时就是匹配了整个子串的长度);如果需要多次搜寻子串在缓冲中的所有位置,则还需要把搜寻起始位置做引数传进搜寻函式。当然,这时子串在缓冲中搜索到的各位置必须转换为档案的绝对座标才行。
跨缓冲区的搜寻,上一缓冲的最后搜寻结果(位置、已匹配长度)要带进下一缓冲的搜寻,这些必要资讯也要传进搜寻函式,因此这是个复杂而引数众多的函式。
括号匹配问题(pascal)
const
op1='{[<(';
op2='}]>)';
var
s:array[1..1000] of char;
,p1,p2,l,i:longint;
st:string;
ch:char;bj:boolean;
begin
readln(st);
:=0;l:=length(st);
bj:=true;
for i:=1 to l do begin
ch:=st[i];
if pos(ch,op1)<>0 then begin
inc();s[]:=ch;
end
else if pos(ch,op2)<>0 then begin
if =0 then begin bj:=false;break;end
else begin
p2:=pos(ch,op2);
ch:=s[];
p1:=pos(ch,op1);
if p1=p2 then dec()
else begin bj:=false;break;end;
end;
end;
end;
if =0 and bj then writeln('yes')
else writeln('no');
end.
C语言括号匹配问题
用堆叠解决。
C圆括号匹配程式问题
这程式码也太多了。。LZ你可以到我空间里参考“括号匹配”这篇文章,之前给一个提问者写的。不一定是你想要的功能,但你可以按那个思路来改。
帮忙改一下这个C++括号匹配问题
#include<iostream>
#include<stack>
using namespace std;
bool invalid(char* s)
{
stack<char> st;
st.empty();
while(*s!='')
{
if(*s == '['|| *s == '(')
st.push(*s);
else
{
if(*s == ']')
{
if(st.() != '[')
{
return true;
}
else
st.pop();
}
if(*s == ')')
{
if(st.()!='(')
{
return true;
}
else
st.pop();
}
}
s++;
}
return !st.empty();
}
int main()
{
int i;
char a[50];
cin>>a;
if(invalid(a))
cout<<"不匹配"<<endl;
else
cout<<"正确"<<endl;
cin>>i;
return 0;
}