有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
*/
//这种判断括号匹配的问题可以考虑使用栈(后进先出),因为若是匹配的字符串长度为n,例如({[()]})它一定会在第n/2+1个字符处跟栈顶匹配,
//栈顶也是前面未匹配的字符串的最后一个字符
#include<stdio.h>
#define N 20
int main()
{
char s[N];
char p[N]; //用来存储判断的栈
int i=1,j=0;
printf("请输入字符串字符元素:");
scanf("%s",s);
p[j]=s[0]; //先把要判断的字符串第一个字符入栈
while(s[i]!='\0')
{
if(p[j]=='('&&s[i]==')'||p[j]=='{'&&s[i]=='}'||p[j]=='['&&s[i]==']') //假如字符串当前要判断的字符和栈顶字符匹配,则栈顶元素出栈。
j--;
else
{
j++;
p[j]=s[i]; //表示不匹配,入栈
}
i++; //继续比较下一个字符
}
if(j<0)
printf("字符串有效!:\n");
else
printf("字符串无效!:\n");
return 0;
}
给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘?的字符串 s ,判断字符串是否有效。
于 2022-11-19 16:34:33 首次发布