c语言编程!求大神帮忙,采纳后会加追加20分~~小妹在此谢过了

背景有一个软件公司常常用一种不为人知的语言来开发程序,这个语言的特点如下:有两种形式的字符串,一种为加单引号,另一种加双引号。单引号的字符串可以包含双引号,双引号的字符串... 背景

有一个软件公司常常用一种不为人知的语言来开发程序,这个语言的特点如下:

有两种形式的字符串,一种为加单引号,另一种加双引号。单引号的字符串可以包含双引号,双引号的字符串也可以包含单引号。字符串不能分行,其中也不能包含同样的引号字符。

有两种注释方式:@字符为行注释,而双括号(())内的文本为块注释。

块注释不能嵌套,所有在块中的文本均被忽略。一个块可以包含几行文本。

注释不能出现在字符串内。

在块注释中的行注释字符和引号都是没有意义的。

注释行中的双括号和引号都是没有意义的。

程序的任何部分都不能出现“#”字符;即使在字符串或注释内。

分号用来终止语句和生命。每个不在注释或字符串中的分号都被作为程序逻辑行的结束。

可以用逻辑行数来粗略地评估程序的大小,即计算不在注释或字符串内的分号的个数。写一个程序读进去几组程序代码,对每组代码都输出逻辑行数和物理行数,并对未终止的注释块和字符串发出警告消息。

输入

输入包含一个或多个程序,以#表示每个程序终止,以##表示输入终止。

输出

对于包括未终止字符串的行,输出:“Unterminated string in line n.”,其中n换成行号。

如果该程序包括一个未终止的块注释,以如下格式输出一行:”Unterminated block comment at end of
program.“

在错误信息之后,以如下格式输出一行:”Program x contains y logical lines and z physical
lines.“。其中x、y和z用相应的数字代替。

测试输入
((Block comment:))
"string";('another string;');@line comment
##

测试输出
Program 1 contains 2 logical lines and 2 physical lines.
1、#、##不一定单独成行(这就是交了10+的原因了)#或者##可能出现在每行的最后。而且#、##不管是单独成行还是和其他字符处在同一行,它们所在行都不算是物理行。(感觉很无助,最后一次就是WA。单独成行不算就忍了,所在行有其他字符还不算,实在不能忍)

2、即使

;;;

((#

最后这一行也不算是注释。输出也是3行逻辑行,1行物理行

3、一个程序可能是由多行输入组成的。最开始是把全部放在一个一维字符数组中。结果一直RE。数组开大一点又MLE。(这道题还好没有TLE)需要注意的是,最后两个例子的内存是1024K,而例子中会出现一行就有1000000个字符的情况,char
a[1000000]已经接近1024K。所以,想全部存下来再扫是不现实的。唯有一行一行地处理。

还要说一下,没有#、##在输入行中间的情况,如adad#ass;没有双括号被拆分的情况
展开
 我来答
qiminixi
2013-08-30 · TA获得超过819个赞
知道小有建树答主
回答量:552
采纳率:0%
帮助的人:238万
展开全部
  1. (())注释

  2. "",''字符串

  3. ()改变优先级

  4. ;语句结束

  5. @注释

  6. # 、##

  7. 。。。。

    主要就是配对判断,也不算很难。以()为例,找到一个'('就入栈,找到一个')'就出栈,如果在‘;’前刚好出栈完毕,说明正确,如果遇到;后还有'('说明缺失‘)’,如果遇到;还有')'说明少了'('。栈用链表进行存储(新增加的节点放在前面,节点中记录行号,列号也可以记录。。)。

    如果遇到‘((’那么下面的所有字符都当成注释处理,直接找‘))’。

    如果遇到"",'',其他所有字符除'',"",# 外都当成一般字符处理

    如果在没有遇到@、((、“、‘ 前遇到字母、数字等,当成普通字符处理

   。。。。。

   在读取文件时,只要一次读一定数量就可以了,不需要一次读一整行(不管是物理行还是逻辑行),一行的长度是不定的。行(物理行)只是对用户有些有效,处理程序会忽略掉。假如读入100个字符,第99个刚好是 ';',最后一个个为'(',这时候还不能判断'('是括号还是注释'((',可以将'('挪到开头,再读入99个字符做判断。

   大概就这样吧

追问
看私信。。。
星空装饰设计3m
2013-08-29 · 超过14用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:32.7万
展开全部
测试输入中,字符串可以用单括号()括起来?题目中并没有给这个要求啊,例如('another string;');
这个要怎么处理?
更多追问追答
追问
看问题补充~~~
追答
()是改变优先级么?你给的的测试用例中有(),而你的问题补充中又说“没有双括号被拆分的情况”,???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式