练习1-24。编写一个程序来检查C程序中的基本语法错误,如不匹配的括号、方括号和大括号。不要忘记引号,包括单引号和双引号,转义序列和注释。(如果以完全的一般性来做这个程序会很难。)
这是我为这个程序编写的代码(还没有完成,稍后我会继续完善):
当我给它一个输出像
这是我为这个程序编写的代码(还没有完成,稍后我会继续完善):
#include <stdio.h>
#define YES 1
#define NO 0
int a = 0;
void push(int stack[], int c);
void pull(int stack[]);
int check(int stack[], int c);
int main()
{
int stack[1000], c, keep = 1;
extern int a;
while ((c = getchar()) != EOF && keep == YES)
{
if (c == '[' || c == '(' || c == '{')
push(stack, c);
else if (c == ']' || c == ')' || c == '}')
keep = check(stack, c);
}
return 0;
}
void push(int stack[], int c)
{
int i;
for (i = a; i; --i)
stack[i+1] = stack[i];
++a;
stack[0] = c;
}
void pull(int stack[])
{
int i;
--a;
for (i = 0; i < a; ++i)
stack[i] = stack[i+1];
stack[a] = '\0';
}
int check(int stack[], int c)
{
if ((c == ']' && stack[0] == '[') || (c == ')' && stack[0] == '(') || (c == '}' && stack[0] == '{'))
{
pull(stack);
return YES;
}
else
{
printf("Mismatched character: '%c'\n", c);
return NO;
}
}
当我给它一个输出像
{}
或( ) () {} []
这样的时候,它可以工作,但是对于像(())
这样的输入,它给我返回了这个输出:
switch
可能是个好主意。 - tadman