当前位置:首页 » 编程语言 » c语言怎么判断含括号
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言怎么判断含括号

发布时间: 2022-07-16 03:18:37

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;i<n;i++)
{
if(output[i]==1)printf("yes\n");
else printf("no\n");
}
system("pause");
return 0;
}
这是程序,当输入星号*就结束。不论是否一行只有它。有点不符合题意呃。你可以改改。
上面那个人写的为单行输入。且没有考虑中括号和大括号。

㈡ C语言实现带有括号的四则运算

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
char token[61]; /*存放表达式字符串的数组*/
int n=0;
void error(void) /*报告错误函数*/
{
printf("ERROR!\n");
exit(1);
}
void match(char expected) /*检查字符匹配的函数*/
{
if(token[n]==expected)
token[++n]=getchar();
else error();
}
double term(void); /*计算乘除的函数*/
double factor(void); /*处理括号和数字的函数*/
double exp(void) /*计算加减的函数*/
{
double temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return temp;
}
double term(void)
{
double div;
double temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0) /*处理除数为零的情况*/
{
printf("The divisor is zero!\n");
exit(1);
}
temp/=div;
break;
}
return temp;
}
double factor(void)
{
double temp;
char number[61];
int i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.') /*将字符串转换为浮点数*/
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else error();
return temp;
}
main()
{
double result;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return 0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
fclose(data);
return 0;
getch();
}

㈢ C语言的中括号是什么东东,怎么看怎么像小括号

您好,我是软件之家的♂北极熊熊,很高兴为您解答。
==================================================================================
()这个是小括号
有的教材把它简称为括号,弧是圆弧的意思,就很明显括号就是()
而中括号是[],别混淆了哦
==================================================================================
如您满意,谢谢五星采纳~~~~~↖(*^ω^*)↗

㈣ c语言的顺序表 栈 判断表达式括号是否匹配

int match_kuohao(char c[i])
{
int i=0;
sequence_stack s;
init(&s); //初始化栈, &这个符号是用来修改s这个实参的值的,不然不能修改。
while(c[i]!='#')
{
switch(c[i])
{
case'{':
case'[':
case'(':push (&s,c[i]);break;
case'}':if(!empty(s)&&read(s)=='{' )
{pop(&s);break;}
else return 0; //意思就是如果遇到了右大括号的话,那么栈S不是空且栈顶元素是左大括号,
//那么就让这个栈顶元素{出栈。
//如果栈是空的,或者说栈顶的不是{,那么就return 0,意思也就是表达式不合法。下面同理。
case']':if(!empty(s)&&read(s)=='[' )
{pop(&s);break;}
else return 0;
case')':if(!empty(s)&&read(s)=='(' )
{pop(&s);break;}
else return 0;
}
i++;
}
return (empty(s));
}

㈤ c语言如何判断一个符号是比较符号还是括号

熟悉语法,用眼睛看,简单。
用程序分析,很难,如同制作一个编译器,作词法,句法,语法分析。

你可以先罗列一些能想到的状况,然后决定如何分析判断。
例如:
#include 行里的 < ..> 是 括号。
/* ..<. */ 注解行里的 是 注解
// ...< 注解行里的 是 注解
" ... < .." 字符串里的 是 字符
'<' 字常量里的 是 字符
a < b 类似这种情况是运算符, 噢 不排除 &a,&b,*a,&b,不排除 (a) (b) ....
a<=b 类似这种情况是运算符
a<<b 类似这种情况是运算符
a<<=b 类似这种情况是运算符

还好不是 >, 不用考虑 ->

还好不是 c++, 否则还要考虑:
static_cast<type>(a)
dynamic_cast<type>(a)
const_cast<type>(a)
reinterpret_cast<type>(a)
template <class T>
k=GetMax<int>(i,j);
i = GetMin<int,long> (j,l);
mypair<double> myfloats (3.0, 2.18);
template <class T>
T mypair<T>::getmax ()
cout << k << endl;
等等等等情况

还有写错的情况,即不符合词法,句法,语法的情况。

㈥ C语言 判断括号()是否匹配

#include<iostream>
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<<"请输入字符个数:";
cin>>total;
char a[total];
for(int i=0;i<total;i++){
cin>>a[i];
}
sqstack s;
inistack(s);
for (int j=0;j<total;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;
}

㈦ 判断圆括号是否配对用C语言如何实现

1、设计原理:
主要是利用了栈的结构,在表达式的输入过程中实现对括号是否匹配的判断。根据其括号的原则:小括号之中不能含有大括号或中括号,中括号中不能含有大括号。再由紧密性,左边括号和右边括号是紧密相连的。否则判断为错。 其操作为:每输入一个字符打一下回车,若输入括号顺序错误则跳出,并显示错误!
2、例程:

#include<stdio.h>
#defineMAX100
#defineTRUE1
#defineFALSE0
#defineEa

typedefstructtransition/*建立一个栈*/
{
charsq[MAX];
inttop;
}sqstack;

sqstackbt;
intemptysqstack(sqstackbt)/*判栈空*/
{
if(bt.top==-1)
returnTRUE;
else
returnFALSE;
}
voidpushsqstack(sqstackbt,charsh)/*入栈*/
{
if(bt.top==MAX-1)
{
printf("overflow");
exit(0);
}
bt.top++;
bt.sq[bt.top]=sh;
}
voidpopsqstack(sqstackbt)/*出栈*/
{
intsh;
if(bt.top==-1)
{
printf("empty");
exit(0);
}
sh=bt.sq[bt.top];
bt.top--;
returnsh;
}
Search(sqstackbt)/*查找括号是否匹配*/
{
charc=0;
printf("Ifyouwanttobreak,pleaseinput'a' ");
while(c!=E&&bt.top<=MAX&&c!='('&&c!='['&&c!='{')
{
c=getchar();
pushsqstack(bt,c);
}
SearchA(bt,c);
SearchB(bt,c);
SearchC(bt,c);
}
SearchA(sqstackbt,charc)/*查找小括号是否匹配*/
{
if(c=='(')
{
while(c!=')'&&c!='['&&c!=']'&&c!='{'&&c!='}')
{
c=getchar();
pushsqstack(bt,c);
}
if(c=='(')
printf("right ");
elseif(c=='['||c==']'||c=='{'||c=='}')
printf("wrong ");
}
}
SearchB(sqstackbt,charc)/*查找中括号是否匹配*/
{
if(c=='[')
while(c!=']'&&c!='('&&c!=')'&&c!='{'&&c!='}')
{
c=getchar();
pushsqstack(bt,c);
}
if(c==')'||c=='{'||c=='}')
printf("wrong ");
elseif(c=='(')
SearchA(bt,c);
elseif(c==']')
printf("right ");
else
printf("wrong ");
}
SearchC(sqstackbt,charc)/*查找大括号是否匹配*/
{
if(c=='{')
while(c!='}'&&c!='['&&c!=']'&&c!='('&&c!=')')
{
c=getchar();
pushsqstack(bt,c);
}
if(c==']'||c==')')
printf("wrong ");
elseif(c=='[')
SearchB(bt,c);
elseif(c=='(')
SearchA(bt,c);
elseif(c=='}')
printf("right ");
else
printf("wrong ");
}
main()
{
inti;
bt.top=-1;
i=emptysqstack(bt);
if(i)
{
Search(bt);
}
else
exit(0);

}

㈧ c语言判断一字符串左右括号是否匹配的问题!求助

由于没有分配空间,,,修改如下

#include<stdio.h>
#include<string.h>
#include <stdlib.h> // !!!分配内存头文件
#define m 20
typedef char ElemType;
typedef struct
{
ElemType stack[m];
int top;
}stacknode;
stacknode *sp;
Init(stacknode *st)
{
st->top=0;
return 0;
}
void Push(stacknode *st,ElemType x)
{
if(st->top==m)
printf("The stack is overflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void Pop(stacknode *st)
{
st->top=st->top-1;
}
main()
{
char s[m];
int i;
printf("Creat a stack!\n");
sp = (stacknode *)malloc(sizeof(stacknode)); // !!!添加的语句
Init(sp);
printf("Input a expression:\n");
gets(s);
for(i=0;i<strlen(s);i++)
{
if(s[i]=='(')
Push(sp,s[i]);
if(s[i]==')')
Pop(sp);
}
if(sp->top==0)
printf("左右括号是匹配的!\n");
else
printf("左右括号是不匹配的!\n");
}

㈨ c语言中while循环后面的语句没有用括号括起来,怎么判断哪些语句是在循环里面,为什么

while(循环条件)
表达式a;
表达式b;
表达式c;

没有大括号的话,循环体就只有表达式a,就是说while()后第一个分号前面的语句就是循环体。所以当只有一个表达式时,也可以省略掉大括号。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

㈩ C语言用栈写一个判断输入的表达式的括号是否正确的算法

入栈的是 “(” 或者 “【” ,
然后收到 ")" 或者“】” 的时候,
看站头是不是对应的 “(” 或者“】”,是的话弹出,不是就错误,
循环,直到站空,否则错误。

比如堆栈 是 “(((【【【((”
遇到")", 弹出站头,中间可以继续压入“(”或“【”