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

c语言括号匹配的检验

发布时间: 2022-01-22 09:12:08

‘壹’ 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>

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语言程序

#include<stdio.h>
struct T{
int tag;
};
struct T t[128];
int top=0;

int isEmpty(){
if(top<=0) return 1;
else return 0;
}
int isFull(){
if(top>=127) return 1;
else return 0;
}
void push(int tag){
if(isFull()) {return;}
t[top].tag=tag;
top++;
}
int out(){
if(isEmpty()) {return -1;}
int number=0;
number=t[top].tag;
t[top].tag=0;
top--;
return number;
}

int check(char *p)
{
int x[128]={0};
int temp=0;
int k=0;
while(*p!='\0'){
if(*p=='{') push(temp);
if(*p=='}') k=out();
if(k==-1) break;
temp++;
p++;
}

if(top!=0)
{
while(!isEmpty()){
printf("[%d]处的{没有匹配,缺少}\n",out()-1);
}
}
else
{
printf("[%d]处的}没有匹配,缺少{\n",temp);
}

return 0;
}

main()
{
char *x="main(){int x=0;while(true){int x=324;}printf('dsgdg');}}}";
printf("%d\n",check(x));
}

‘肆’ 编程实现检验括号是否匹配

#include <stdio.h>

char stack[100];
int top=-1;
void push(char ch)
{
stack[++top]=ch;
}

char pop()
{
if(top<-1)
{
top--;
return '\0';
}
else
{
return stack[top--];
}
}
int main(void)
{
char c[20];
int i=0;
char ch;
gets(c);
while(c[i] != '\0')
{
if(c[i] == '(')
push(c[i]);
if(c[i] == ')')
{
ch=pop();
if(ch=='\0')
break;
}
i++;
}
if(top == -1)
printf("right");
else
printf("wrong");
return 0;
}

‘伍’ C语言:表达式括号匹配检验(压栈,出栈)

算法提示:
1)凡出现左括号,则进栈;
2)凡出现右括号,首先检查栈是否空
若栈空,则表明该“右括号”多余,
否则和栈顶元素比较,
若相匹配,则“左括号出栈”

否则表明不匹配。
3)表达式检验结束时,
若栈空,则表明表达式中匹配正确,
否则表明“左括号”有余。

‘陆’ C语言怎样检测大括号{}的匹配

有的C编辑器支持自动检查的,

不过最好养成良好的书写习惯

我的习惯是 在需要大括号时 总是一次输入一对
并且分行对齐 然后在中间插入东西, 基本上不会出错的

比如

void main(viod)
{

}

先写一对 大括号 然后在括号中间加东西,注意缩行, 在里边需要大括号时如法炮制
变成这样

void main(viod)
{
uchar a=5;
uchar i=0
if(a<5)
{
.......
}
}

‘柒’ 如何用c语言实现括号匹配的问题

先按顺序取出所有的括号.然后循环删除_相邻的_差为一或二的_点.最后如果表空则匹配.
单向链表:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 80
typedef struct list{
char node;
struct list* next;
}list,*plist;

void iniList(plist);
int isEmpty(plist);
int listAppend(plist,char);
int delBracketsFormList(plist);

int main(int argc,char* argv[]){
char test[LEN];
int i;
list a;
plist p;
p=&a;
iniList(p);
scanf("%80s",test);
for (i=0;i<LEN;i++){
switch(test[i]){
case '[': case']': case'{': case'}': case'(': case')':
listAppend(p,test[i]);
break;
default:continue;
}
}
delBracketsFormList(p);
if (isEmpty(p)){
printf("括号匹配!\n");
}
else
printf("括号不配对!\n");
return 0;
}

void iniList(plist aplist){
aplist->next=NULL;
aplist->node='\0';
}

int isEmpty(plist aplist){
return aplist->next==NULL?1:0;
}

int listAppend(plist aplist,char a){
plist bplist=aplist,anode;
while (bplist->next){
bplist=bplist->next;
}
anode=(plist)malloc(sizeof(list));
if (!anode)exit(-1);
anode->node=a;
anode->next=NULL;
bplist->next=anode;
return 0;
}
int delBracketsFormList(plist aplist){
plist temp;
int has=1;
if (isEmpty(aplist))
return 0;
while(has){
has=0;
temp=aplist;
while (temp->next){
if(temp->next->next){
if((temp->next->next->node - temp->next->node == 1)||(temp->next->next->node - temp->next->node == 2)){
temp->next = temp->next->next->next;
has=1;

}
else
temp = temp->next;
}
else
temp =temp->next;
if(!has)break;
}

}
return 0;
}

‘捌’ 急求c语言编写的利用栈检验括号匹配的程序完整代码,谢谢啦~

输入:串中只含有'(', ')'两个符号,判断是否括号匹配
并不需要真正的入栈、出栈,用top移动模拟即可
#include <stdio.h>
int main()
{
char s[256], *p;
int top = 0;
scanf("%s", s);

for(p=s; *p; p++)
{
if(*p == '(')++top; //入
else --top; //出
if(top < 0)break; //无左括号与之匹配
}
if(!*p && !top)puts("Yes");
else puts("No");
}

‘玖’ 数据结构(C) 请用类C语言实现括号匹配的检验这个算法

栈穷举,严蔚敏的书上有现成的代码

‘拾’ 括号匹配检验(c语言)

函数返回值类型不能是Status,Status只是泛指类型,至于具体用什么类型,你应该根据实际情况而定。
比如你的第一个函数Status InitStack(SqStack &S) ,
可以改为int InitStack(SqStack &S) ,其它的你自己根据情况定了。