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

📄 class1.h

📁 这功能实在太强大了
💻 H
字号:
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <fstream.h>


int flag=0;  //标志位
char cch;
char bchar;
char str[100];
FILE *fp;

void Pushback(char c)
{
	bchar=c;
	flag=1;
}
/////////////////////////////////////////////////////////////////
char GetC()
{
	  if(flag==1)
	  {
		  flag=0;
		  return bchar;
	  }
	  char t;
	  t=getc(fp);//继续取出字符
	  if(t=='\n'||t=='\t'||t=='\r') t=' ';
	  return t;
}
/////////////////////////////////////////////////////////////////////////
int SearchKey()  //搜索关键字
{
	char StrToken[32][10]={"auto","break","case","char","const",
		 "continue","default","do","double","else","enum","extern",
		 "float","for","goto","if","int","long","register","return",
         "short","signed","sizeof","static","struct","switch",
		 "typedef","union","unsigned","void","volatile","while"};
	for(int i=0;i<32;i++)
	{
		if(strcmp(StrToken[i],str)==0)   //比较关键字 	  
		return i;	  
	}
	return 0;
}
///////////////////////////////////////////////////////////////////////////////////
bool OpenFile(char fname[20])//读取文件
{
    cout<<"输入文件位置及名称(如: e:\\a.c):"<<endl;
    cin>>fname;
	if((fp=fopen(fname,"r"))==NULL)   
	{
		cout<<"文件路径或者文件名不正确导致了文件打开错误!!!"<<endl;
		return false;
	}
    else return true;
}//OpenFile*/

/*void ShowFile() //显示源文件
{
	char charfile;
	char fname[20];
	if( OpenFile(fname) ==true )
	{
		cout<<"*********************************源程序**********************************"<<endl;
	    while(charfile!=EOF) 
		{
			cout<<charfile<<endl;
		}
	    fclose(fp);
		printf("/n");
	}

}//*/
/*bool ReadFile(ifstream& infile)//读取源文件
{
	const int MAXLENTH=31;

	char SFile[MAXLENTH];
	cout<<"输入正确路径和文件名(包括扩展名):"<<endl;
	cin.getline(SFile,MAXLENTH,'\n');
	infile.open(SFile,ios::binary);
	if(infile.fail())
	{
		cout<<"The file doesn't exist,Can't open it!"<<endl;
	exit(1);	
	return false;
	}
    else
	{
	cout<<"FILE Opened"<<endl;
	return true;
	}

}//ReadFile*/

bool SaveFile(ofstream& outfile)//保存文件
{
	const int MAXLENTH1=31;
	char FFile[MAXLENTH1];
	cout<<"Please enter a name for final file:"<<endl;
	cin.getline(FFile,MAXLENTH1,'\n');
	outfile.open(FFile,ios::app);
	//cout<<"File has beeen created and opened"<<endl;
	//return true;
	if(outfile.fail())
	{
		cout<<"Cann't creat&open file"<<endl;
		return false;
	}
	else 
	{
		cout<<"File has beeen created and opened"<<endl;
		return true;
	}//*/
}//SaveFile

void CloseFile(char fname[20])
{
	fp=fopen(fname,"r");
    fclose(fp);
	cout<<"文件 "<<fname<<" 已经关闭!"<<endl;
}//CloseFile
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////	
void GetNextWord()//处理字符,并且取下一个
{    
	cch=GetC();
	while(cch==' ')// 除去空格
	{
		cch=GetC();
	}

	int k=0;
	str[0]=cch;
//////////////////////////////////////////////////////////////////////////////////
	if((cch>='a'&&cch<='z')||(cch>='A'&&cch<='Z'))//字符是字母
	{		
		str[++k]=cch;//当前字符存入str数组中
		cch=GetC();
		while((cch>='a'&&cch<='z')||(cch>='A'&&cch<='Z')||(cch>='0'&&cch<='9'))
		{
			str[k++]=cch;
			cch=GetC();
		}
		str[k]='\0';
		Pushback(cch);//是\0的话回退

		if(SearchKey()==0)
			cout<<"字符(串):"<<str;
		else cout<<"关键字:"<<str;//是关键字的话输出<<SearchKey()

	}
	//////////////////////////////////////////////////////////////
	else if(cch<='9'&&cch>='0')//数字的识别 
	//else if1
	{
		while(cch<='9'&&cch>='0')
			cch=GetC();
		if(cch=='E'||cch=='D')
			cch=GetC();
		if(cch=='+'||cch=='-')
		{
			cch=GetC();

			if(cch<='9'&&cch>='0')
				cch=GetC();
			while(cch<='9'&&cch>='0')
				cch=GetC();
			Pushback(cch);

			cout<<"400";
		}
		else if(cch<='9'&&cch>='0')
		{
			while(cch<='9'&&cch>='0')
				cch=GetC();
			Pushback(cch);
			cout<<"400";
		}
		else if(cch=='.')//else if2
		{
			while(cch<='9'&&cch>='0')
				cch=GetC();
			if(cch=='E'||cch=='D')
				cch=GetC();
			if(cch=='+'||cch=='-')
			{
				cch=GetC();
			    if(cch<='9'&&cch>='0')
				    cch=GetC();
			    while(cch<='9'&&cch>='0')
				    cch=GetC();
			    Pushback(cch);
			    cout<<"400";
			}
		    else if(cch<='9'&&cch>='0')
			{
				while(cch<='9'&&cch>='0')
				    cch=GetC();
			    Pushback(cch);
			    cout<<"400";
			}
		    else Pushback(cch);
		    cout<<"400";
		}//else if2
	}//else if1
////////////////////////////////////////////////////////////////////////////////////////
	else //判断运算符
	{
		switch(cch)
		{
		    case '+':
				{
					cch=GetC();
			        switch(cch)
					{
			            case '+':cout<<"1"<<"++";break;
				        case '-':cout<<"2"<<"+=";break;
				        default:Pushback(cch);cout<<"3"<<"+";break;
					}
				};break;
							  
			case '-':
				{
					cch=GetC();
				    switch(cch)
					{
					    case '-':cout<<"4"<<"--";break;
					    case '=':cout<<"5"<<"-=";break;
                        case '>':cout<<"6"<<"->";break;
					    default:Pushback(cch);cout<<"7"<<"-";break;
					}
				};break;
			case '*':
				{
					cch=GetC();
					switch(cch)
					{
						case'=':cout<<"12"<<"*=";break;
						case'/':cout<<"右注释:"<<"*/";break;
						default:Pushback(cch);cout<<"乘法:"<<"*";
					}
				};break;
							 
			case '/':
				{
					cch=GetC();
					switch(cch)
					{
						case'=':cout<<"除以等于:"<<"/=";break;
						case'*':cout<<"左注释:"<<"/*";break;
                        case'n':cout<<"换行符:"<<"/n";break;
						default:Pushback(cch);cout<<"除法:"<<"/";
					}
				};break;
							 
			case '<':
				{
					cch=GetC();
					switch(cch)
					{
						case'=':cout<<"12"<<"<=";break;
						case'<':cch=GetC();
						  if(cch=='=')cout<<"13"<<"<<=";
						  else 
						  {
							  Pushback(cch);
						      cout<<"14"<<"<<";
						  };
						default:Pushback(cch);cout<<"左尖括号:"<<"<";
								 
					}
				};break;
							 
			case '>':
				{
					cch=GetC();
				    switch(cch)
					{
						case'=':cout<<"16"<<">=";break;
						case'>':cch=GetC();
						  if(cch=='=')cout<<"17"<<">>=";
						  else 
						  {
							  Pushback(cch);
							  cout<<"18"<<">>";break;}
						default:Pushback(cch);cout<<"右尖括号:"<<">";
					}
				};break;

           /* case '"':
				{
					cch=GetC();
				    switch(cch)
					{
						case'=':cout<<"16"<<">=";break;
						case'>':cch=GetC();
						  if(cch=='=')cout<<"17"<<">>=";
						  else 
						  {
							  Pushback(cch);
							  cout<<"18"<<">>";break;}
						default:Pushback(cch);cout<<"右尖括号:"<<">";
					}
				};break;//*/
////////////////////////////////////////////////////////////////////////
			case '=':
				{
					cch=GetC();
					if(cch=='=') cout<<"20"<<"==";
					else 
					{
						Pushback(cch);
						cout<<"21"<<"=";
					}
				};break;
			case '%':
				{
					cch=GetC();
					if(cch=='=') cout<<"22"<<"%=";
					else
					{
						Pushback(cch);
						cout<<"23"<<"%";
					}
				};break;
			case '!':
				{
					cch=GetC();
					if(cch=='=') cout<<"不等于:"<<"!=";
					else 
					{
						Pushback(cch);
						cout<<"感叹号:"<<"!";
					}
				};break;
			case '&':
				{
					cch=GetC();
				    switch(cch)
					{
					    case '&':cout<<"26"<<"&&";break;
						case '=':cout<<"27"<<"&=";break;
						default:Pushback(cch);cout<<"28"<<"&";
					}
				};break;
//////////////////////////////////////////////////////////////////////////
			case '#':cout<<"#号:"<<"#"<<endl;	
				{
			//		for(k=0;k<100;k++)
			//			str[0]='\0';
					cch=GetC();
					if((cch>='a'&&cch<='z')||(cch>='A'&&cch<='Z'))//字符是字母
					{
					
						str[++k]=cch;//当前字符存入str数组中
		                cch=GetC();
					    while((cch>='a'&&cch<='z')||(cch>='A'&&cch<='Z'))
						{
							str[k++]=cch;
			                cch=GetC();
						    str[k]=' ';
		                    Pushback(cch);//是\0的话回退
						    cout<<"#头文件名:"<<str;break;
						} 
					}
      		     
				};break;

			case '^':

					cch=GetC();
					if(cch=='=')cout<<"29"<<"^=";
					else
					{
						Pushback(cch);cout<<"30"<<"^";
					};break;

			case '|':

				    cch=GetC();
					switch(cch)
					{
						case'|':cout<<"31"<<"||";break;
						case'=':cout<<"32"<<"|=";break;
						default:Pushback(cch);cout<<"33"<<"|";
					};break;
			case '(':cout<<"左小括号:"<<"(";break;
			case ')':cout<<"右小括号:"<<")";break;
			case '[':cout<<"左中括号:"<<"[";break;
            case ']':cout<<"右中括号:"<<"]";break;
            case '{':cout<<"左大括号:"<<"{";break;
			case '}':cout<<"右大括号:"<<"}";break;
			case '~':cout<<"40"<<"~";break;
			case '.':cout<<" 点 :"<<".";break;
            case '"':cout<<"双引号:"<<"\"";break;
            case ';':cout<<"分号:"<<";";break;
            case ',':cout<<"逗号:"<<",";break;
			//case '#':cout<<"#";break;
            case '?':
				{
					cch=GetC();
				    if(cch==':')cout<<"44"<<"?:";
					else cerr<<"error!"<<endl;
				}break;
		}//switch
	}//else
}//GetNextWord



/*string GetText()  
{   
    string file_name1; //

	cout<<"请输入源文件名(包括路径和后缀名):";

	cin>>file_name1;

	ifstream infile(file_name1.c_str(),ios::in);
	if (!infile)
	{
		cerr<<"哦!无法打开文件 "<<file_name1.c_str()<<" !!!"<<endl;
        exit(-1);
	}
    cout<<endl;
    char f[1000];
	infile.getline(f,1000,EOF);
	infile.close();
	return f;
}//*/
                           						
						


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -