📄 1.cpp
字号:
#include <iostream>
#include <assert.h>
using namespace std;
class ConvertFile
{
private:
const int SIZE;
FILE* inFile; //输入文件
FILE* outFile; //输出文件
char* buffer;
bool flag; //判断是否是/*类型的注释
public:
ConvertFile(char* inF,char* outF);
~ConvertFile();
void Convert();
void Line(char* pos,int size);
};
ConvertFile::ConvertFile(char* inFileName,char* outFileName):SIZE(256)
{
inFile = fopen(inFileName ,"r");
outFile = fopen(outFileName,"w");
if(inFile == NULL || inFile == NULL)
{
cout<<"Error: open file failed!\n";
return ;
}
buffer = new char[SIZE];
memset(buffer,'\0',SIZE);
flag = false;
}
ConvertFile::~ConvertFile()
{
fclose(inFile);
fclose(outFile);
if(buffer)
{
delete []buffer;
}
}
void ConvertFile::Convert()
{
while(fgets(buffer,SIZE,inFile) != NULL)
{
int size = strlen(buffer);
Line(buffer,size);
memset(buffer,'\0',size);
}
}
/*-------------------------------------*/
//pos:起始位置
//size:该字符串的大小
/*-------------------------------------*/
void ConvertFile::Line(char* pos,int size)
{
if(flag)
{
char * temp;
if( (temp = strstr(pos,"*/")) == NULL )
{
return ;
}
else
{
flag = false;
Line(temp+2,size - (temp+2 - pos));
}
}
else
{
char* temp1 = strstr(pos,"//"); //判断该行是否含有//
char* temp2 = strstr(pos,"/*"); //判断该行是否含有/*
if(temp1 == NULL && temp2 == NULL) //如果都没有,就直接拷贝
{
fwrite(pos,sizeof(char),size,outFile);
}
else if(temp2 == NULL) // 如果有//,则拷贝//前面的字符,后面的省略
{
fwrite(pos,sizeof(char),temp1-pos,outFile);
if(temp1 != buffer)
{
fprintf(outFile,"\n");
}
}
else if(temp1 == NULL)// 如果有/*,则拷贝/*前面的字符,后面的省略直到遇到*/
{
fwrite(pos,sizeof(char),temp2-pos,outFile);
flag = true;
Line(temp2+2,size-(temp2+1-pos));
}
else if(temp1 - temp2 < 0) //如果//和/*都有,则判断是否//在前面,如果是则拷贝//前面的字符,后面的省略
{
fwrite(pos,sizeof(char),temp1-pos,outFile);
if(temp1 != buffer)
{
fprintf(outFile,"\n");
}
}
else if(temp1 - temp2 > 0)//如果//和/*都有,则判断是否/*在前面,如果是则拷贝/*前面的字符,后面的省略直到遇到*/
{
fwrite(pos,sizeof(char),temp2-pos,outFile);
flag = true;
Line(temp2+2,size-(temp2+1-pos));
}
}
}
void main()
{
ConvertFile c("source.txt","result.txt");
c.Convert();
cout<<"over\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -