C++编写的用于去除C、C++、Java等语言的注释的源码片段

本文介绍了一段使用C++编写的代码,该代码能够有效地去除C、C++及Java源代码中的注释,包括单行注释和多行注释。此工具通过解析输入文件并生成无注释的输出文件,适用于代码清理或预处理任务。
下面的内容段是关于C++编写的用于去除C、C++、Java等语言的注释的片段的内容,应该能对各位也有好处。


#include<iostream>
#include<fstream>

using namespace std;

void parse(ifstream &fin , ofstream &fout)
{
    char curr, prev = '0';
    bool comment = false;
    bool charLiteral = false;
    bool stringLiteral = false;

    while (fin.get(curr)) {
        if (charLiteral) {
            fout << curr;
                charLiteral = false;
            }
            prev = (prev == '\' && curr == '\') ? '0' : curr;
        } else if (stringLiteral) {
            fout << curr;
                stringLiteral = false;
            }
            prev = (prev == '\' && curr == '\') ? '0' : curr;
        } else if (comment) {
                prev = '0';
                comment = false;
                prev = curr;
            }
        } else if (prev == '/') {
                fout << 'n';
                prev = '0';
                while (fin.get() != 'n');
                prev = '0';
                comment = true;
                fout << prev << curr;
                prev = curr;
            }
        } else {
            if (curr != '/') {
                fout << curr;
            }
            charLiteral = (prev != '\' && curr == ''');
            stringLiteral = (prev != '\' && curr == '"');
            prev = (prev == '\' && curr == '\') ? '0' : curr;
        }
    }
}

{
    if (argc != 3) {
        cerr << "Usage:t" << argv[0] << " <input_file> <output_file>n";
        return 1;
    }

    ifstream fin(argv[1]);
    ofstream fout(argv[2]);

    if (!fin) {
        cerr << "Error:t"" << argv[1] << "" - no such filen";
        return 1;
    }

    parse(fin, fout);

    fin.close();
    fout.close();

    return 0;
}          复制代码
                                                                                                                                   


转载于:https://juejin.im/post/5c4a5d53e51d4550f3173d99

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值