c语言检查输入的算术表达式中的圆括号是否配对并显示相应的结果,用C++设计一个算法,判别一个算术表达式的圆括号是否配对正确。...

#include "stdio.h"

void BracketMatch(char *str) /* str[]中为输入的字符串,利用堆栈技术来检查该字符串中的括号是否匹配*/

{

SeqStack S;

int i;

char ch;

InitStack(&S);

for(i=0; str[i]!='\0'; i++)   /*对字符串中的字符逐一扫描*/

{

switch(str[i])

{

case '(':

case '[':

case '{':

Push(&S,str[i]);

break;

case ')':

case ']':

case '}':

if(IsEmpty(&S))

{

printf("\n右括号多余!");

return;

}

else

{

GetTop(&S,&ch);

if(Match(ch,str[i]))  /*用Match判断两个括号是否匹配*/

Pop(&S,&ch);      /*已匹配的左括号出栈*/

else

{

printf("\n对应的左右括号不同类!");

return;

}

}

}/*switch*/

}/*for*/

if(IsEmpty(&S))

printf("\n括号匹配!");

else

printf("\n左括号多余!");

}

void main()

{

char str[100];

printf("please input:");

gets(str);

BracketMatch(str);

}

你好,我可以回答您的问题。设计c语言算法判断一个算术表达式圆括号是否正确配对的方法如下: 1. 定义一个栈,用来存储左括号; 2. 遍历算术表达式的每个字符,如果是左括号 '(',则将其入栈; 3. 如果是右括号 ')',则将栈最后一个左括号出栈; 4. 如果栈空或最后一个括号不是配对的左括号,则算法结束,返回“不正确”; 5. 如果遍历完所有字符后,栈非空,则返回“不正确”,否则返回“正确”。 代码实现如下: ``` #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAXSIZE 100 typedef char ElemType; typedef struct { ElemType data[MAXSIZE]; int top; } Stack; void InitStack(Stack *S) { S->top = -1; } bool Push(Stack *S, ElemType x) { if (S->top == MAXSIZE - 1) { return false; } S->data[++(S->top)] = x; return true; } bool Pop(Stack *S, ElemType *x) { if (S->top == -1) { return false; } *x = S->data[(S->top)--]; return true; } bool GetTop(Stack *S, ElemType *x) { if (S->top == -1) { return false; } *x = S->data[S->top]; return true; } bool IsPair(ElemType left, ElemType right) { if (left == '(' && right == ')') { return true; } return false; } bool IsCorrectExpr(char *str) { Stack S; InitStack(&S); int i = 0; while (str[i] != '\0') { if (str[i] == '(') { Push(&S, '('); } else if (str[i] == ')') { ElemType left; if (Pop(&S, &left) && IsPair(left, str[i])) { // do nothing } else { return false; } } else { // ignore other characters } i++; } return S.top == -1; } int main() { char str[MAXSIZE]; printf("请输入一个算术表达式:"); scanf("%s", str); if (IsCorrectExpr(str)) { printf("括号匹配正确\n"); } else { printf("括号匹配错误\n"); } return 0; } ``` 希望能够帮助您解决问题。如果有任何疑问,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值