NC13588. 从后台研发到跑路
描述
输入描述
对于每个输入文件,处理到文件尾。 输入如题意描述,保证单个输入文件不超过5kb
输出描述
输出去掉注释以后的内容,除了注释以外的内容全部需要输出,卿不要漏掉换行空格之类的。
示例1
输入:
a b/*666 2333*/c" lihai/*le*/\"/*666*/" /*
输出:
a bc" lihai/*le*/\"/*666*/" /*
pypy3 解法, 执行用时: 183ms, 内存消耗: 59296K, 提交时间: 2023-03-28 17:24:19
import sys def main(): lines = sys.stdin.readlines() code = ''.join(lines) i = 0 code_len = len(code) in_str = 0 while i < code_len: if code[i] == '"' and (i == 0 or code[i - 1] != '\\'): in_str ^= 1 if in_str == 0 and code[i] == '/' and i + 3 < code_len and code[i + 1] == '*': end = code.find("*/",i+2) if end != -1: i = end + 2 continue print(code[i], end = '') i += 1 if __name__ == '__main__': main()
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 408K, 提交时间: 2020-10-12 23:14:42
#include <cstdio> #include <regex> #include <string> using namespace std; int main() { string code; regex r("^((?:[^/\\\\\"]|/[^*]|\\\\\"|\\\\(?!\")|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")*)/\\*[\\s\\S]*?\\*/"); for (int c; (c = getchar()) != -1;) code.push_back(c); auto pos = code.cbegin(); for (smatch m; regex_search(pos, code.cend(), m, r); pos = m.suffix().first) { printf("%s", m.str(1).c_str()); } while (pos != code.cend()) putchar(*pos++); }
C++ 解法, 执行用时: 3ms, 内存消耗: 396K, 提交时间: 2021-09-05 19:06:16
#include<bits/stdc++.h> using namespace std; int main(){ string code; regex r("^((?:[^/\\\\\"]|/[^*]|\\\\\"|\\\\(?!\")|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")*)/\\*[\\s\\S]*?\\*/"); for (int c; (c = getchar()) != -1;) code.push_back(c); auto pos = code.cbegin(); for (smatch m; regex_search(pos, code.cend(), m, r); pos = m.suffix().first) printf("%s", m.str(1).c_str()); while (pos != code.cend()) putchar(*pos++); }