编写一个函数,实现以下功能: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 1. 左括号必须用相同类型的右括号闭合。 2. 左括号必须以正确的顺序闭合。 3. 每个右括号都有一个对应的相同类型的左括号。 函数原型为:void isValid(const char* s) 示例 1: 当 s = "()" 函数输出:true 示例 2: 当 s = "()[]{}" 输出:true 示例 3: 当 s = "(]" 输出:false 提示:s不超过20个字符,错误输入,函数输出error 只提交函数和相应的编译预处理指令,无需提交主函数;
很简单的要求,就是一个模拟堆栈的过程,代码量比较多的部分是判断堆栈是否应该抵消,还是直接false了
当然,泥点的报错是保留节目了,if(s==NULL)记得加上,算分的~
#include<stdio.h>
void isValid(const char* s)
{
if (s == NULL)
{
printf("error");
return;
}
//边储存边判断
char mem[100] = {};
int count = 0;
for (int i = 0; s[i] != '\0'; i++)
{
if (s[i] == ']' || s[i] == '}' || s[i] == ')')
{
if (s[i] == ']' && mem[count - 1] != '[')
{
printf("false");
return;
}
else if (s[i] == '}' && mem[count - 1] != '{')
{
printf("false");
return;
}
else if (s[i] == ')' && mem[count - 1] != '(')
{
printf("false");
return;
}
else mem[--count] = '\0';
}
if (s[i] == '[' || s[i] == '{' || s[i] == '(' )
{
mem[count++] = s[i];
}
}
if (count != 0) printf("false");
else printf("true");
return;
}
不得不说,这道题的代码写下来是真的挺好看的(外观)