Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Xóa chú thích (comments) trong mã nguồn C++


Cho mã nguồn C++ dưới dạng vector (mỗi dòng một phần tử). Xóa tất cả chú thích: chú thích dòng (//) và chú thích khối (/* ... */). Dòng rỗng sau khi xóa không được giữ lại. Ví dụ:

Đầu vào: vector chứa các dòng có chú thích dòng và khối.

Đầu ra: vector chỉ chứa code thực thi, không chú thích, bỏ dòng rỗng.

Phương pháp: Duyệt từng ký tự, quản lý trạng thái

  • Biến inBlock đánh dấu đang trong chú thích khối.
  • Duyệt từng dòng, từng ký tự:
    • Nếu không trong khối và gặp // → bỏ qua phần còn lại của dòng.
    • Nếu không trong khối và gặp /* → đặt inBlock = true, bỏ qua 2 ký tự.
    • Nếu trong khối và gặp */ → đặt inBlock = false, bỏ qua 2 ký tự.
    • Nếu không trong khối → thêm ký tự vào buffer dòng hiện tại.
  • Kết thúc dòng: nếu không trong khối và buffer không rỗng → thêm vào kết quả, xóa buffer.

Ví dụ mã nguồn

#include <bits/stdc++.h>
using namespace std;

vector<string> removeComments(vector<string> &source) {
    vector<string> ans;
    string line;
    bool inBlock = false;
    for (auto &s : source) {
        for (int i = 0; i < s.size(); i++) {
            if (!inBlock && i+1 < s.size() && s[i]=='/' && s[i+1]=='/') break;
            else if (!inBlock && i+1 < s.size() && s[i]=='/' && s[i+1]=='*') { inBlock = true; i++; }
            else if (inBlock && i+1 < s.size() && s[i]=='*' && s[i+1]=='/') { inBlock = false; i++; }
            else if (!inBlock) line.push_back(s[i]);
        }
        if (!inBlock && !line.empty()) {
            ans.push_back(line);
            line.clear();
        }
    }
    return ans;
}

int main() {
    vector<string> source = {
        "/*Test program */", "int main()", "{ ",
        " // variable declaration ", "int a, b, c;",
        "/* This is a test", " multiline ", " comment for ", " testing */",
        "a = b + c;", "}"
    };
    vector<string> res = removeComments(source);
    for (auto &x : res) cout << x << '\n';
    return 0;
}

Kết quả

int main()
{ 
int a, b, c;
a = b + c;
}