本文目录一览:
C语言判断给定表达式的括号是否匹配
#include stdio.h
#include stdlib.h
int main(int argc, char *argv[])
{
char c;
int i=0,n;
int output[100];
int lefts=0,leftm=0,leftb=0;
int rights=0,rightm=0,rightb=0;
while((c=getchar())!='*')
{
if(c=='\n')
{
if(lefts == rights leftm == rightm leftb ==rightb)output[i]=1;
else output[i]=0;
lefts=0;
leftm=0;
leftb=0;
rights=0;
rightm=0;
rightb=0;
i++;
}
if(c == '(' )lefts++;
if(c == ')' )rights++;
if(c == '[' )leftm++;
if(c == ']' )rightm++;
if(c == '{' )leftb++;
if(c == '}' )rightb++;
}
n=i;
for(i=0;in;i++)
{
if(output[i]==1)printf("yes\n");
else printf("no\n");
}
system("pause");
return 0;
}
这是程序,当输入星号*就结束。不论是否一行只有它。有点不符合题意呃。你可以改改。
上面那个人写的为单行输入。且没有考虑中括号和大括号。
用C语言如何实现判断圆括号是否配对?
如果只有圆括号(没有[ ] 或 { }),不需要构造一个栈。因为用栈实现时,栈里装的都是一模一样的左括号 '(' ,因此我们只需定义一个 整型变量 来记录 栈中元素的个数 即可。具体代码如下:
#include stdio.h
int main (void)
{
char input = 0;
int num = 0; /* 不用栈,只记录栈中元素的个数,初始化为0 */
while (1 == scanf ("%c", input)) /* 读入字符串,每次读一个字符存入 input 中 */
{
if ('(' == input)
{
++num; /* 相当于把左括号压栈 */
}
if (')' == input)
{
--num; /* 相当于遇到右括号时弹栈 */
}
if (0 num)
{
printf ("括号不匹配\n");
return 0;
}
}
if (0 == num) /* 读完字符串后判断“栈”是否为空 */
{
printf ("括号匹配\n");
}
else
{
printf ("括号不匹配\n");
}
return 0;
}
C语言 判断括号()是否匹配
#includeiostream
using namespace std;
#define maxsize 100;
#define T 10;
struct sqstack{
char *base;
char *top;
int stacksize;
};
sqstack inistack(sqstack s){//初始化栈
s.base=new char[10];
if(!s.base)
cout"error";
s.top=s.base;
s.stacksize=maxsize;
return s;
}
sqstack push(sqstack s,char e){//进栈
if(s.top-s.base=s.stacksize){
s.base=new char[10];
if(!s.base)
cout"error";
s.top=s.base+s.stacksize;
s.stacksize+=T;
}
*s.top=e;
s.top++;
return s;
}
sqstack pop(sqstack s, char e){//出栈
e=*s.top;
-- s.top;
return s;
}
int main(){
char *base,*top;
int total;
cout"请输入字符个数:";
cintotal;
char a[total];
for(int i=0;itotal;i++){
cina[i];
}
sqstack s;
inistack(s);
for (int j=0;jtotal;j++){
if(a[j]=='(')
push(s,a[j]);
else if(a[j]==')')
pop(s,a[j]);
}
if(s.base==s.top)
cout"true";//匹配完后,如果栈为空,则括号匹配正确
else
cout"failed";
system("pause");
return 0;
}