我希望用C编写一个程序,该程序读取输入并仅输出某些输出(特别是省略注释)。
该函数将忽略其输入中的任何注释字符。例如,除了字符串中的输入外,它会忽略所有以C注释形式输入的内容(例如/*
和*/
之间以及//
和换行符[\n
)之间的输入)。
[注意,在第二种情况下,将打印换行符,而在第一种情况下,既不会打印/*
,也不会打印*/
。
但是在字符串中(例如"hello //world"
),程序将打印注释说明符之后的内容(在这种情况下,即使“ world”以单行C注释开头,该程序也将打印"hello //world"
。说明符)。
到目前为止,我已经尝试考虑几种情况。我考虑过定义两个变量sngl_line
和multi_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
处理输入,就好像您处于以下状态之一:
每个州都有一些如何过渡到另一个州的规则。
例如从//注释状态开始,一直停留到行尾,然后恢复正常。从normal开始,如果下一个字符为//
,则跳转到//注释状态。从normal开始,如果下一个字符为/*
,则跳到/ *注释状态。
这确实是最有价值的编程任务,所以我不再列出。
看来OP的数据没有处于''状态。