📄 main.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 + -