判断{}是否成对出现

编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
 

int main()
{
	char ch = 0;
	int count = 0;
	while ((ch = getchar()) != EOF)
	{
		if (ch == '{')
		{
			count++;
		}
		else if ((ch == '}') && (count == 0))
		{
			printf("不成对出现\n");
			return 0;
		}
		else if (ch == '}')
		{
			count--;
		}
	}
	if (count == 0)
		printf("成对出现\n");
	else
		printf("不成对出现\n");
	system("pause");
	return 0;
}

 

### 回答1: 可以使用栈来实现判断括号是否成对。遍历字符串,当遇到左括号时入栈,当遇到右括号时出栈,如果栈为空或者栈顶元素不是对应的左括号,则说明括号不成对,返回false,否则继续遍历。最后如果栈为空,则说明括号全部成对,返回true,否则返回false。 示例代码如下: ```javascript function isParenthesesMatched(str) { const stack = []; for (let i = 0; i < str.length; i++) { if (str[i] === '(' || str[i] === '[' || str[i] === '{') { stack.push(str[i]); } else if (str[i] === ')' && stack[stack.length - 1] === '(') { stack.pop(); } else if (str[i] === ']' && stack[stack.length - 1] === '[') { stack.pop(); } else if (str[i] === '}' && stack[stack.length - 1] === '{') { stack.pop(); } else { return false; } } return stack.length === 0; } ``` 使用示例: ```javascript console.log(isParenthesesMatched('()')); // true console.log(isParenthesesMatched('()[]{}')); // true console.log(isParenthesesMatched('(]')); // false console.log(isParenthesesMatched('([)]')); // false console.log(isParenthesesMatched('{[]}')); // true ``` ### 回答2: 在ES6中,我们可以使用一种简单的方法来判断括号是否成对。这个方法是通过使用数组和循环来实现的。 首先,我们需要定义一个函数,它将接收一个字符串作为参数,这个字符串将包含各种字符,包括括号。接着,我们将创建一个空数组,用于存储遇到的所有括号。 接下来,我们使用一个for循环来遍历字符串中的每个字符。如果我们遇到了一个开括号(‘(’,‘[’,‘{’),我们就将它添加到数组中。如果我们遇到的是一个闭括号(‘)’,‘]’,‘}’),我们将检查数组中的最后一个元素是否与当前的闭括号相匹配。如果是匹配的,则我们将数组中的最后一个元素弹出。如果不匹配,或者数组为空,则说明括号没有成对出现,返回false。 最后,在循环结束后,我们将检查数组中是否还有剩余的括号。如果有,则说明括号没有成对出现,返回false。如果数组为空,则说明所有的括号都成对出现,返回true。 以下是一个示例函数的代码实现: ```javascript function checkParentheses(str) { let arr = []; for(let i = 0; i < str.length; i++) { if(str[i] === '(' || str[i] === '[' || str[i] === '{') { arr.push(str[i]); } else if(str[i] === ')' || str[i] === ']' || str[i] === '}') { if(arr.length === 0) { return false; } if((str[i] === ')' && arr[arr.length-1] === '(') || (str[i] === ']' && arr[arr.length-1] === '[') || (str[i] === '}' && arr[arr.length-1] === '{')) { arr.pop(); } else { return false; } } } return arr.length === 0; } ``` 使用这个函数,我们可以轻松地判断一个字符串中的括号是否成对出现。返回true表示括号成对,返回false表示括号没有成对出现。 ### 回答3: ES6提供了一个很简洁的方法来判断括号是否成对,即使用箭头函数以及Array的一些方法。我们可以通过以下步骤来实现该功能: 首先,我们将输入的字符串转成数组,并使用Array的filter方法来过滤掉除了括号之外的所有字符。这样我们就只剩下了括号。 接下来,利用reduce方法对数组进行遍历,同时使用一个计数器来判断括号是否成对。当遇到左括号时,计数器加1;当遇到右括号时,计数器减1。最后,如果计数器的值为0,则表示所有括号都成对,否则就表示有括号没有成对。 最后,我们将判断结果返回即可。 以下是一个用于判断括号成对的ES6箭头函数的实现代码: const isMatchingBrackets = (str) => { const brackets = str.split("").filter(char => ['(', ')', '[', ']', '{', '}'].includes(char)); let count = 0; return !brackets.reduce((acc, char) => { if (char === '(' || char === '[' || char === '{') { count++; } else { count--; } return count < 0 ? acc + 1 : acc; }, 0); }; 该函数会返回一个布尔值,true表示所有括号成对,false表示有括号没有成对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuruhua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值