题意:判断所输入数据中括号是否正确匹配
解题思路:用数组模拟栈实现括号的匹配。
前期处理:字符数组第一个元素赋值0,数组长度赋值1。
1.不停读入字符,判断其是否为左括或右括。
2.1.若为左括,压入栈。
2.2.若为右括,判断栈顶元素是否为与之匹配的左括。若是,数组长度减1;若否,将该右括压入栈。
3.若读到#,判断数组长度是否为1然后进行相应输出。
4.若读到@,先判断、输出后结束程序。
#include<cstdio>
int main()
{
int len = 1;//用来记录数组长度的len
char t, in[256] = {0};//用来读取字符的字符变量t和储存括号的字符数组in
while (scanf ("%c", &t) != EOF)
{
if (t == 40 || t == 91 || t == 123)//若为左括压入栈
in[len++] = t;//压入栈后数组长度自增一
if (t == 41 && in[len - 1] == 40 || t == 93 && in[len - 1] == 91 || t == 125 && in[len - 1] == 123)//若为右括且匹配则数组长度减一
len--;
else if (t == 41 || t == 93 || t == 125)//若为右括且不匹配则压入栈
in[len++] = t;//压入栈后数组长度自增一
if (t == 35 || t == 64)//若为@或#则判断并输出
{
if (len == 1)
printf ("Wonderful\n");
else
printf ("Be Careful\n");
len = 1;
}
if (t == 64)//若为@则结束程序
return 0;
}
return 0;
}