一般实现:
#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;
}
状态模式实现:
暂无!