mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-11 02:58:13 +08:00
79 lines
4.0 KiB
HTML
79 lines
4.0 KiB
HTML
<p>Given a C++ program, remove comments from it. The program source is an array of strings <code>source</code> where <code>source[i]</code> is the <code>i<sup>th</sup></code> line of the source code. This represents the result of splitting the original source code string by the newline character <code>'\n'</code>.</p>
|
|
|
|
<p>In C++, there are two types of comments, line comments, and block comments.</p>
|
|
|
|
<ul>
|
|
<li>The string <code>"//"</code> denotes a line comment, which represents that it and the rest of the characters to the right of it in the same line should be ignored.</li>
|
|
<li>The string <code>"/*"</code> denotes a block comment, which represents that all characters until the next (non-overlapping) occurrence of <code>"*/"</code> should be ignored. (Here, occurrences happen in reading order: line by line from left to right.) To be clear, the string <code>"/*/"</code> does not yet end the block comment, as the ending would be overlapping the beginning.</li>
|
|
</ul>
|
|
|
|
<p>The first effective comment takes precedence over others.</p>
|
|
|
|
<ul>
|
|
<li>For example, if the string <code>"//"</code> occurs in a block comment, it is ignored.</li>
|
|
<li>Similarly, if the string <code>"/*"</code> occurs in a line or block comment, it is also ignored.</li>
|
|
</ul>
|
|
|
|
<p>If a certain line of code is empty after removing comments, you must not output that line: each string in the answer list will be non-empty.</p>
|
|
|
|
<p>There will be no control characters, single quote, or double quote characters.</p>
|
|
|
|
<ul>
|
|
<li>For example, <code>source = "string s = "/* Not a comment. */";"</code> will not be a test case.</li>
|
|
</ul>
|
|
|
|
<p>Also, nothing else such as defines or macros will interfere with the comments.</p>
|
|
|
|
<p>It is guaranteed that every open block comment will eventually be closed, so <code>"/*"</code> outside of a line or block comment always starts a new comment.</p>
|
|
|
|
<p>Finally, implicit newline characters can be deleted by block comments. Please see the examples below for details.</p>
|
|
|
|
<p>After removing the comments from the source code, return <em>the source code in the same format</em>.</p>
|
|
|
|
<p> </p>
|
|
<p><strong>Example 1:</strong></p>
|
|
|
|
<pre>
|
|
<strong>Input:</strong> source = ["/*Test program */", "int main()", "{ ", " // variable declaration ", "int a, b, c;", "/* This is a test", " multiline ", " comment for ", " testing */", "a = b + c;", "}"]
|
|
<strong>Output:</strong> ["int main()","{ "," ","int a, b, c;","a = b + c;","}"]
|
|
<strong>Explanation:</strong> The line by line code is visualized as below:
|
|
/*Test program */
|
|
int main()
|
|
{
|
|
// variable declaration
|
|
int a, b, c;
|
|
/* This is a test
|
|
multiline
|
|
comment for
|
|
testing */
|
|
a = b + c;
|
|
}
|
|
The string /* denotes a block comment, including line 1 and lines 6-9. The string // denotes line 4 as comments.
|
|
The line by line output code is visualized as below:
|
|
int main()
|
|
{
|
|
|
|
int a, b, c;
|
|
a = b + c;
|
|
}
|
|
</pre>
|
|
|
|
<p><strong>Example 2:</strong></p>
|
|
|
|
<pre>
|
|
<strong>Input:</strong> source = ["a/*comment", "line", "more_comment*/b"]
|
|
<strong>Output:</strong> ["ab"]
|
|
<strong>Explanation:</strong> The original source string is "a/*comment\nline\nmore_comment*/b", where we have bolded the newline characters. After deletion, the implicit newline characters are deleted, leaving the string "ab", which when delimited by newline characters becomes ["ab"].
|
|
</pre>
|
|
|
|
<p> </p>
|
|
<p><strong>Constraints:</strong></p>
|
|
|
|
<ul>
|
|
<li><code>1 <= source.length <= 100</code></li>
|
|
<li><code>0 <= source[i].length <= 80</code></li>
|
|
<li><code>source[i]</code> consists of printable <strong>ASCII</strong> characters.</li>
|
|
<li>Every open block comment is eventually closed.</li>
|
|
<li>There are no single-quote or double-quote in the input.</li>
|
|
</ul>
|