没有标题可以吗

看《嵌入式操作系统设计与实现》时,书中用c来模仿面向对象设计,如定义一个对象时,方法是:


BEGIN_DEFINE_OBJECT(_OBJECT)

.....

....

END_DEFINE_OBJECT()


但这使得在source insight下不好查找_OBJECT的定义,于是写了个程序把所有文件中对象定义改回来,变成:

struct _OBJECT{

...

...

};

代码如下:


#include <iostream>

#include <io.h>
#include <fstream>

#include <string>

using namespace std;

int main(int argc, char **argv)
{


	long filehandle;
	_finddata_t fileInfo;



	filehandle=_findfirst(".\\*.*",&fileInfo);
	_findnext(filehandle,&fileInfo);//去除.和..

	//string changedFileDir("changedFiles");
	system("mkdir changedFiles");//新建目录,存放修改后的文件
	//char tempDir[100]={".\\changedFiles\\"};


	string searchStr1("BEGIN_DEFINE_OBJECT("),replaceStr1("struct "),searchStr2(")"),replaceStr2("{"),searchStr3("END_DEFINE_OBJECT()"),replaceStr3("};");
	string::size_type pos=0;

	while(!_findnext(filehandle,&fileInfo))
	{
		if(fileInfo.attrib!=_A_SUBDIR && strcmp(fileInfo.name,"change.exe"))//finlename:change.cpp
		{
			cout<<fileInfo.name<<endl;
			char tempDir[100]={".\\changedFiles\\"};
			strcat(tempDir,fileInfo.name);





			char temp[200];
									
			ifstream ifs;//这里放在内部定义,让它成为局部变量。如果放在外面定义,读多个文件时,只有第一个文件能被读(写)到。即使文件关闭也不行
			ofstream ofs;

			ifs.open(fileInfo.name);

			ofs.open(tempDir);//这4行代码也可直接写成ifstream ifs(fileInfo.name),ofstream ofs(tempDir);
			while(!ifs.eof())
			{
				ifs.getline(temp,200);
						
				string tempStr(temp);

				pos=tempStr.find(searchStr1,pos);//返回第一个查找到的位置

				if(pos!=string::npos)//没找到时会返回 string::npos

				{
					tempStr.replace(pos,searchStr1.size(),replaceStr1);
							
					pos=0;
					pos=tempStr.find(searchStr2,pos);
					if(pos!=string::npos)
					{
						tempStr.replace(pos,searchStr2.size(),replaceStr2);
					}
				}

				pos=0;
				pos=tempStr.find(searchStr3,pos);
				if(pos!=string::npos)
				{
					tempStr.replace(pos,searchStr3.size(),replaceStr3);
				}

				pos=0;

				ofs<<tempStr<<endl;
				}
				ifs.close();
				ofs.close();
		}
	}


	_findclose(filehandle);

	return 0;
}


你可能感兴趣的:(没有标题可以吗)