统计文件中字符串行数

jp1984 2005-05-28 11:13:21
正在做一个LL(1)文法分析器 。
有个文本文件中包含一文法,如
-----------------------------------
exp->term exp'
exp'->addop term exp'|ε
addop->+|-
term->factor term'
term'->mulop factor term'|ε
mulop->*
factor->( exp )|number
-----------------------------------

请问如何统计文件中句子的行数 。比如上面的文件中 一共有7个推导
怎么用 (== '\n')判断不行啊。
谁能帮忙提供一个可行的思路。
如果这样的话,怎么讲上面的每个推导分别放入不同的字符串??

谢谢
...全文
206 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vagrant_ch 2005-05-29
  • 打赏
  • 举报
回复
LL(1)文法分析器?我的编译原理都忘记得差不多了,寒!!不过我还不是很明白你的问题是什么,可能是不太清楚你的问题了。
不过,判断行数的话,我觉得不是用'\n',因为对于字符串而言,换行的话相当于结束了一行的字符串,应该是用'\0'。
再者,像你给的例子中已经知道了是有七个推导,对多行的字符串进行处理的时候用数组会比较好,可是放在数组的时候我们又能很容易知道数组的大小,当然也可以知道行数……
也不知道是不是我理解错了???
sankt 2005-05-29
  • 打赏
  • 举报
回复
up
zdy_8212 2005-05-29
  • 打赏
  • 举报
回复
代替机制,不是很明白你想要的思想是什么。memcpy,strcpy开设缓冲,再。。。
xiongbing528 2005-05-29
  • 打赏
  • 举报
回复
学习
killer1984 2005-05-29
  • 打赏
  • 举报
回复
我在做词法分析器的缓冲器时是用ofstream的get方法读文件,这样用=='\n'判断是可行的(代码在寝室,现在发不了)。

也可以用getline方法,不过要考虑行的大小来设定缓冲区大小,对于行大小比较小且可控时是可行的(不然会非常麻烦)。
zhousqy 2005-05-29
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

#define MAXLINE 2048
#define MAXLEN 256

int main(void)
{
FILE *fp;
int i, line = 0;
char *buf[MAXLINE], temp[MAXLEN];

if ((fp = fopen("test.txt", "r")) == NULL) {
fprintf(stderr," fopen error");
exit(1);
}

while (fgets(temp, MAXLEN, fp)) {
buf[line++] = (char *)malloc(sizeof(char) * strlen(temp));
strcpy(buf[line-1], temp);
}

printf("Sum of line is %d\n", line);

for (i = 0; i < line; i++) {
printf("%s", buf[i]);
}

for (i = 0; i < line; i++)
free(buf[i]);

return 0;
}
foochow 2005-05-28
  • 打赏
  • 举报
回复
不懂-_-友情mark!!

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧