读取输入和打印特定输出

问题描述 投票:1回答:1

我希望用C编写一个程序,该程序读取输入并仅输出某些输出(特别是省略注释)。

该函数将忽略其输入中的任何注释字符。例如,除了字符串中的输入外,它会忽略所有以C注释形式输入的内容(例如/**/之间以及//和换行符[\n)之间的输入)。

[注意,在第二种情况下,将打印换行符,而在第一种情况下,既不会打印/*,也不会打印*/

但是在字符串中(例如"hello //world"),程序将打印注释说明符之后的内容(在这种情况下,即使“ world”以单行C注释开头,该程序也将打印"hello //world"。说明符)。

到目前为止,我已经尝试考虑几种情况。我考虑过定义两个变量sngl_linemulti_line来确定输入何时在//和\ n之间(即sngl_line为true)或何时输入在/**/之间(即multi_line为真正)。我基本上已经完成了一个忽略注释的程序(但目前无法忽略注释中的注释或嵌套注释)。为了解决后一个问题,我正在考虑定义另外两个布尔变量,以确定何时多行注释“有效”(即输入在/ *和* /之间)以及何时单行注释“有效”,以便首先出现的注释说明符优先。

为了忽略字符串中的注释,我正在考虑定义一个布尔变量string来确定何时出现字符串。显然,该字符串一定不能出现在注释中,因此,如果为true,则sngl_line和multi_line应该为false。如果此变量为true,则sngl_line和multi_line都必须为false。

它满足以下测试:

Input 1:
/* hello */
/* this is a comment //
// */
// this is also a comment /*

Expected output 1:



Note that the above output consists solely of two newline characters

Input 2:
"// /* a comment within a string // /*" // a comment outside of a string

Expected output 2:
"// /* a comment within a string // /*" 
Note the space at the end of the expected output

Input 3:
// "// /* //" strings within comments don't count, of course
"but of course // this text should be printed"

Expected output 3:

"but of course // this text should be printed"

Input 4:
// /* strings 
/* strings
*/

Expected output 4:


there is one newline character in the above output
c input output
1个回答
1
投票

使用state machine

处理输入,就好像您处于以下状态之一:

  1. 普通
  2. 里面“”
  3. 内部]
  4. / * * /注释内
  5. 在//行尾注释内

每个州都有一些如何过渡到另一个州的规则。

例如从//注释状态开始,一直停留到行尾,然后恢复正常。从normal开始,如果下一个字符为//,则跳转到//注释状态。从normal开始,如果下一个字符为/*,则跳到/ *注释状态。

这确实是最有价值的编程任务,所以我不再列出。


看来OP的数据没有处于''状态。

© www.soinside.com 2019 - 2024. All rights reserved.