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

📄 main.cpp

📁 强大的编译器
💻 CPP
字号:
#include "ctype.h"
#include "string.h"
#include "stdio.h"  

FILE *fp;    
int id;      
void main()
{
	
    char cbuffer;
    char alphaprocess(char buffer);
    char digitprocess(char buffer);
    char otherprocess(char buffer);
    if ((fp=fopen("text.txt","r"))==NULL)   
       printf("error");
    else                                    
       {
		cbuffer=fgetc(fp);                    
	        while (cbuffer!=EOF)              
	            {
	               if(cbuffer==' '||cbuffer=='\n') //无视空格和回车符
				   {
					   cbuffer=fgetc(fp);
				       id=4;
				   }
	               else if(isalpha(cbuffer))    
		                 cbuffer=alphaprocess(cbuffer);   
		           else if (isdigit(cbuffer))
		                 cbuffer=digitprocess(cbuffer); 
		           else cbuffer=otherprocess(cbuffer); 
	              }
        }
}


char alphaprocess(char buffer)
{  
	int search(char searchchar[],int wordtype); //判断当前字符串是否为关键字的函数  
	int atype;
    int i=-1;
	char alphatp[20];    

    while((isalpha(buffer))||(isdigit(buffer))||buffer=='_'||buffer=='.')  //标识符的组成成分
    {
	   alphatp[++i]=buffer;   
       buffer=fgetc(fp);     
	}
     alphatp[i+1]='\0';       
     atype=search(alphatp,1); 
     if(atype!=0)             
	  {
		 printf("(%s, (1,%d))\n",alphatp,atype); //关键字的ID为1
		 id=1;                 
	  }
	 else
	  {
		 printf("(%s ,2)\n",alphatp);  //标示符的ID为2
	     id=2;                         
	  } 
          return(buffer);              
}


int search(char searchchar[],int wordtype)
{
	char *key[38]={"include","static","auto","double","int","struct", "break","else",
                "long","switch","case","return","union","const","float","short",
				"unsigned","printf","stdio","typedef","char","extern","long",
		        "continue","for","signed","void","default","goto","sizeof","define",
				"volatile","do","if","static","while","main","malloc"};
	                
     int i;
     int p;
     switch (wordtype)
     {
       case 1:for (i=0;i<=31;i++)
		{
		  if (strcmp(key[i],searchchar)==0)  
		      { p=i+1; break; }
		  else p=0;
		}
		   }
	 return(p);
} 


/*处理读取字符为数字时的情况*/
char digitprocess(char buffer)
{
	int i=-1;
	char digittp[20];
	while ((isdigit(buffer))||buffer=='.'||buffer=='e'||buffer=='E')
	  {
	    digittp[++i]=buffer;
	    buffer=fgetc(fp);        
	  }

	digittp[i+1]='\0';
	printf("(%s ,3)\n",digittp);  //数字的ID为3
	id=3;                         
	return(buffer);
}

/*处理读出字符为其他字符的情况*/
char otherprocess(char buffer)  //其他的ID为4
{     
	int n=0;
    char ch[20];
    ch[0]=buffer;
    ch[1]='\0';
	if(ch[0]=='%'||ch[0]=='\\')
	{ buffer=fgetc(fp);
      ch[1]=buffer;
	  ch[2]='\0';
      printf("(%s ,5)\n",ch); 
	  id=4;
      buffer=fgetc(fp);         
	  return(buffer);
	}
	if(ch[0]=='&')
	{
		buffer=fgetc(fp);
	    if(buffer!='&')
		 {
		   printf("(%s ,5)\n",ch);
	   	   id=4;
		   return(buffer);
		 }
	   if(buffer=='&')
	   {
		   ch[1]=buffer;
	       ch[2]='\0';
	       printf("(%s ,4)\n",ch);
	       id=3;
	       buffer=fgetc(fp);         
	       return(buffer);
	   }
	 
	 }
 if(ch[0]==','||ch[0]==';'||ch[0]=='{'||ch[0]=='}'||ch[0]=='('||ch[0]==')')
	{ 
		printf("(%s ,5)\n",ch);  
		buffer=fgetc(fp);         
		id=4; 
		return(buffer);
	}

    if(ch[0]=='*'||ch[0]=='/')
	 {  
		printf("(%s ,4)\n",ch);
	    buffer=fgetc(fp);          
		id=4; 
		return(buffer); 
	 }

     if(ch[0]=='='||ch[0]=='!'||ch[0]=='<'||ch[0]=='>')
	  { 
		 buffer=fgetc(fp);
	     if(buffer=='=')               /*防止'==','!=','<=','>='符号的分离*/
	     {  
			ch[1]=buffer;
		    ch[2]='\0';
		    printf("(%s ,4)\n",ch);
	     }
	     else 
		 { 
		    printf("(%s ,4)\n",ch);
			id=4;
			return(buffer); 
		 }
	        buffer=fgetc(fp); 
			id=4;
	        return(buffer);
	     }

     if(ch[0]=='+'||ch[0]=='-')
	  { 
		            
		 { 
		for(int i=1;i<10;i++)  //考虑到正数、负数的情况
		   {
		   buffer=fgetc(fp);
            
		   if(buffer=='+')
		     {
			  ch[1]='+';ch[2]='\0';
			  id=4;
			  goto L;
			  break;       
		     }
		   if(buffer=='-')
		    {
			 ch[1]='-';
			 ch[2]='\0';
			 id=4;
			 goto L;
			 break;       
		    }
           if((buffer==',')||(buffer==';')||(buffer=='+')||(buffer=='-')||(buffer==')')||(isalpha(buffer))) 
			 break;         //防止将+562;+562,+562+,+562-,+561)作为整体输出
		   
      	   ch[i]=buffer;  
	       ch[i+1]='\0';
		   
		 }
           printf("(%s ,3)\n",ch);  
		   id=3; 
           return(buffer);
		}
	  ch[2]='\0';
      L: printf("(%s ,4)\n",ch); 
	  buffer=fgetc(fp);
      id=4;
	  return(buffer);
	  }
}

⌨️ 快捷键说明

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