// RemoveComments.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
void removeComments(char* buf,int n);
int main(int argc, char* argv[])
{
// printf("Hello World!\n");
string filename = "FileWithComments.cpp";
ifstream fin;
int length;
char * buffer;
try{
fin.open(filename.c_str());
}catch (std::exception &e)
{
cout<<e.what()<<endl;
}
if (fin.is_open()) {
cout<<"Success!"<<endl;
fin.seekg(0,std::ios::end);
length = fin.tellg();
fin.seekg(0,std::ios::beg);
buffer = new char[length];
fin.read(buffer,length);
fin.close();
buffer[length-1]='\0';
cout<<buffer<<endl;
removeComments(buffer,length);
cout<<"---------------------------------------"<<endl;
cout<<buffer<<endl;
}
return 0;
}
void removeComments(char* buf,int n)
{
char c;
char *p,*end;//p遍历字符串,end是终点
char *sy,*dy;//sy标志双引号,dy标志单引号
char *xg;//xg标志斜杠/
char *xgx,*xxg;//xgx标志/*,xxg标志*/
sy=dy=xg=xgx=xxg=NULL;
p = buf;
end = p + n;
while (p<end) {
c = *p;
switch(c) {
case '"'://记录双引号出现的位置
{
if (sy==NULL&&dy==NULL) {
sy = p;
}else{
sy = NULL;
}
p++;
}break;
case '\''://记录单引号出现的位置
{
if (dy==NULL&&sy==NULL) {
dy = p;
}else{
dy = NULL;
}
p++;
}break;
case '/':
{
if (sy==NULL&&dy==NULL) {
p++;
char c_temp = *p;
if (c_temp=='/') {//当前遇到的是"//"
*p=' ';
*(p-1)=' ';
p++;
while (*p!='\n') {
*p=' ';
p++;
}
/*//"""""'''''
*
*/
}else if (c_temp=='*') {//当前遇到的是"/*"
*p=' ';
*(p-1)=' ';
p++;
xgx = p;
while (true) {
if (*p=='*'&&*(p+1)=='/') {
*p=' ';
p++;
*p=' ';
break;
}
*p=' ';
p++;
}
}else{
//nothing
}
}
p++;
}break;
default:
{
p++;
}break;
}
}
}