⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 有关文件操作以及字符串选择的代码
💻 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 + -