做国外网站的公证要多少钱,装修网站免费,电子商务网站建设的开发方案,建站能赚钱吗题目 示例 思路
题意 - 给定一段代码#xff0c;将代码中的注释删除并返回。
由于注释只有两种类型#xff1a;
字符串// 表示行注释#xff0c;表示//和其右侧的其余字符应该被忽略。字符串/* 表示一个块注释#xff0c;它表示直到下一个#xff08;非重叠#x…
题目 示例 思路
题意 - 给定一段代码将代码中的注释删除并返回。
由于注释只有两种类型
字符串// 表示行注释表示//和其右侧的其余字符应该被忽略。字符串/* 表示一个块注释它表示直到下一个非重叠出现的*/之间的所有字符都应该被忽略。阅读顺序为从左到右非重叠是指字符串/*/并没有结束块注释因为注释的结尾与开头相重叠。
那么可以直接模拟逐行分析源代码。每个字符有两种情况要么在一个注释内要么不在。因此我们用 in_block 变量来标记状态该变量为 true 表示在注释内反之则不在。
假设此刻不在注释块内
遇到 ‘/*’则将状态改为在注释块内继续遍历后面第三个字符。遇到 ‘//’则直接忽略该行后面的部分。遇到其他字符将该字符记录到 new_line 中。 假设此刻在注释块内遇到 ‘*/’则将状态改为不在注释块内继续遍历后面第三个字符。
我们用 new_line 记录新的一行当遍历到每行的末尾时如果不在注释块内并且 new_line 不为空就把它放入答案中。
代码注释超级详细
代码 /*** Note: The returned array must be malloced, assume caller calls free().*/
#define MAX_LINE_LEN 80
char ** removeComments(char ** source, int sourceSize, int* returnSize) {char **res (char **)calloc(sourceSize, sizeof(char *));//保存有效值char new_line[sourceSize * 100 1];//临时数组int pos 0, new_line_pos 0;bool in_block false;for (int j 0; j sourceSize; j) {//遍历代码char *line source[j];//取当前字符串int line_size strlen(line);for (int i 0; i line_size; i) {//枚举每一个字符if (in_block) {//判断注释结束位置if (i 1 line_size line[i] * line[i 1] /) {in_block false;i;}} else {//判断注释开始位置if (i 1 line_size line[i] / line[i 1] *) { in_block true;i;} else if (i 1 line_size line[i] / line[i 1] /) {//行注释直接跳过当前字符串break;} else {//有效代码记录new_line[new_line_pos] line[i];}}}//存储有效字符串if (!in_block new_line_pos 0) {new_line[new_line_pos] \0;res[pos] (char *)calloc(new_line_pos 1, sizeof(char));strcpy(res[pos], new_line);pos;new_line_pos 0;}*returnSize pos;}return res;
}作者小迅
链接https://leetcode.cn/problems/remove-comments/solutions/2370701/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-2ovj/
来源力扣LeetCode
著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。