【C/C++】栈的应用—分隔符匹配算法

一、算法描述

首先需要提前知道的是,常见分隔符有{ }/* */,它们的使用是循环嵌套的,如果嵌套多层,那么左分隔符将会一直压栈,直到遇到第一个右分隔符。

如果分隔符是匹配的,那么栈顶的左分隔符,就是与之匹配的。例如{[()]},左分隔符入栈,栈顶是’(’,那么遇到的第一个右分隔符就是’)’,如果不是就匹配失败。

算法描述:

(1)从左到右读取字符,每次读取一个字符,若判定为是左分割符,则将它压入栈;

(2)当读取到一个右分割符时,则弹出栈顶 的左分隔符,并判定它是否和此右分隔符匹配,若它们不匹配,则匹配失败,函数返回false;


(3)若栈一直存在没有被弹出的左分隔符,即左分隔符多余,则匹配失败,函数返回false;


(4)若所有的字符都匹配,那么栈顶一直弹出,直到栈为空。等到读入结束后,栈就为空,则表示匹配成功,函数返回true

即只有当栈为空才返回true,其他情况均不匹配,返回false

二、 实现代码

#include <iostream>
#include <stack>
using namespace std;

bool delimiterMatching(char* file);//定义判断分隔符是否匹配的函数

int main()
{
   
	char fileName[50];//定义字符数组

	cout << "Enter a statement (Ex. s=t[5]+x/(m*(n+y));   : ";
	cin >> fileName;

	if (delimiterMatching(fileName))//将fileName传入delimiterMatching函数
		cout 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值