gpt4 book ai didi

c - 检查文件内容的程序。有没有更好的办法?

转载 作者:行者123 更新时间:2023-12-02 08:51:16 25 4
gpt4 key购买 nike

我创建了一个非常基本的“调试”程序,用于检查 C 源文件是否具有相同数量的左右大括号、方括号和圆括号。我有一个相当简单的代码,它可以工作,但代码似乎不必要地长。我正在考虑改用数组。一个数组来存储每个 {,[,( 和另一个存储 },],) 然后计算每个的实例并比较数量。但我认为代码几乎一样长。大家怎么看?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
FILE *fp;
char fname[20];
char c;
int curlybracket = 0;
int curlybracketr = 0;
int squarebracket = 0;
int squarebracketr = 0;
int parentheses = 0;
int parenthesesr = 0;

printf("Please enter the destination of the file: \n");
scanf("%s", fname);
fp = fopen(fname, "r");

if (fp == NULL)
{
printf("Problem opening file!\n");
exit(0);
}

else
{
printf("File opened correctly\n");
}

while (c != EOF)
{
c = getc(fp);
if (c == '{')
{
curlybracket++;
}

if (c == '[')
{
squarebracket++;
}

if (c == '(')
{
parentheses++;
}

if (c == '}')
{
curlybracketr++;
}

if (c == ']')
{
squarebracketr++;
}

if (c == ')')
{
parenthesesr++;
}
}

if (curlybracket == curlybracketr)
{
printf("There are an equal number of curlybrackets\n");
}
else
{
printf("There is an unequal number of curlybrackets\n");
return 0;
}

if (squarebracket == squarebracketr)
{
printf("There are an equal number of squarebrackets\n");
}
else
{
printf("There are an unequal number of squarebrackets\n");
}

if (parentheses == parenthesesr)
{
printf("There are an equal number of parentheses\n");
}
else
{
printf("There are an unequal number of parentheses\n");
}

return 0;
}

最佳答案

如果源文件像“([)]”这样实际上是非法的,你的程序将不会报错。

更好的解决方案是使用 stack ,这是一个后进先出的数据结构。 This section来自维基百科页面说明了用法。

当您从文件中读取开始符号时,将其压入堆栈。如果它是一个结束符号,弹出堆栈。如果弹出的品种不是对应的开仓品种,报不平衡错误。

在文件末尾,如果堆栈为空,则文件中的符号是平衡的。

这是我所知道的测试符号是否平衡的最常用方法。

关于c - 检查文件内容的程序。有没有更好的办法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com