您的位置:首页 > 编程语言 > C语言/C++

删除c 或 c++源文件注释程序(c++实现)

2013-10-04 14:41 411 查看
一般实现:

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
if (argc != 3) {
cout << "argument init failed!" << endl;
return 0;
}
ifstream infile(argv[1]);
ofstream outfile(argv[2]);

while (infile.good()) {
char c = infile.get();
//cout << c << ' ';
switch (c) {
case '"' : {
string str;
getline(infile, str, '"');
outfile << c << str << '"';
break;
}
case '/' : {
char nxt = infile.get();
switch (nxt) {
case '/' : {
string str;
getline(infile, str);
outfile << '\n';
//cout << str << endl;
break;
}
case '*' : {
string str;
char nxt2;
getline(infile, str, '*');
nxt2 = infile.get();
while (nxt2 != '/') {
infile.putback(nxt2);
getline(infile, str, '*');
nxt2 = infile.get();
//           cout << str << endl;
}
break;
}
}
break;
}
default : {
outfile << c ;
}
}
}
infile.close();
outfile.close();
return 0;
}


状态机实现:

#include <iostream>
#include <fstream>
using namespace std;

enum Status { Code, DQuotation, Star, LineComment, ParaComment};

int main(int argc, char* argv[])
{
if (argc != 3) {
cout << "argument init failed!" << endl;
return 0;
}
ifstream infile(argv[1]);
ofstream outfile(argv[2]);

Status status = Code;

while (infile.good()) {
char cur = infile.get();
cout << cur;
switch (status) {
case Code : {
if (cur == '"') {
outfile << cur ;
status = DQuotation;
}
else if (cur == '/') {
char nxt = infile.get();
if (nxt == '*') {
status = ParaComment;
}
else if (nxt == '/') {
status = LineComment;
}
else {
outfile << cur;
infile.putback(nxt);
}
}
else {
outfile << cur;
}
break;
}
case DQuotation : {
outfile << cur;
if (cur == '"') {
status = Code;
}
break;
}
case LineComment : {
if (cur == '\n') {
outfile << cur;
status = Code;
}
break;
}
case ParaComment : {
if (cur == '*') {
status = Star;
}
break;
}
case Star : {
if (cur == '/') {
status = Code;
}
else if (cur != '*') {
status = ParaComment;
}
break;
}
}
}
infile.close();
outfile.close();
return 0;
}


状态模式实现:

        暂无!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 注释
相关文章推荐