📄 main.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//一些定义--------------------------------------------------------------------
typedef struct
{
char ID[2];
char num[11];
}Code;
char* KeyWord[]={
"bool","break","case","char","continue","do","double",//7
"else","float","for","if","int","main","return","struct","switch",//8
"typedef","union",//2
"void","while"//2
};//19
//-----------------------------------------------------------------------------
//所定义函数-------------------------------------------------------------------
bool isDigital(char ch)
{
if(ch>='0' && ch<='9')
return true;
else
return false;
}
bool isLetter(char ch)
{
if( (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') )
return true;
else
return false;
}
bool isDivide(char ch)
{
if(ch=='{' || ch=='}' || ch=='(' || ch==')' || ch=='\'' || ch=='\"' || ch==',' || ch==';' || ch==':')
return true;
else
return false;
}
bool isOperator(char ch)
{
if(ch=='+' || ch=='-' || ch=='*' || ch=='/' || ch=='=' /*|| ch=='>' || ch=='<'*/)
return true;
else
return false;
}
bool isKeyword(char* str)
{
int i=0;
for(i=0;i<19;i++)
{
if(strcmp(str,KeyWord[i])==0)
{
return true;
}
}
return false;
}
//-----------------------------------------------------------------------------
//全局变量---------------------------------------------------------------------
char file[2000];
Code myCode[100];
int count=0;
bool strFlag=false;
//------------------------------------------------------------------------------
int main()
{
int i=0;
FILE* fp;
fp=fopen("s.txt","r");
while( !feof(fp) )
{
file[i++]=fgetc(fp);
}
file[i-1]='\0';
for(i=0;file[i]!='\0';i++)
{
if(file[i]==' ' || file[i]=='\t' || file[i]=='\r' || file[i]=='\n')
file[i]='#';
}
printf("%s\n",file);
printf("-----------------------------------------\n");
//-----------------------------------------------------------------------------
i=0;
while(file[i]!='\0')
{
if(file[i]=='#')
{
i++;
continue;
}//end if file[i]=='#'
if( isLetter(file[i]) )
{
char tmp[10];
int begin=i;
// int end;
int pos=0;
///////////////////////////////////////////////////
while( isDigital(file[i]) || isLetter(file[i]) )
{
tmp[pos]=file[i];
i++;
pos++;
}
tmp[pos]='\0';
pos=0;
// printf("%s",tmp);
// end=i;
if( isKeyword(tmp) )
{
int k;
for(k=0;k<19;k++)
{
if(strcmp(tmp,KeyWord[k])==0)
{
strcpy(myCode[count].ID,"00");
strcpy(myCode[count].num,tmp);
printf("%4s%10s\n",myCode[count].ID,myCode[count].num);
count++;
}
}
// printf("%d",myCode[count-1].Num);
}
else
{
int len=strlen(tmp);
int sum=0;
int t;
for(t=0;t<len;t++)
{
sum+=tmp[t];
}
strcpy(myCode[count].num,tmp);
strcpy(myCode[count].ID,"03");
printf("%4s%10s\n",myCode[count].ID,myCode[count].num);
count++;
}//肯定为标识符
/////////////////////////////////////////////////////
}//end if 判断完保留字或标识符
if( isDigital(file[i]) )
{
char tmp[10];
int pos=0;
while( isDigital(file[i]) )
{
tmp[pos]=file[i];
pos++;
i++;
}
if(file[i]=='.')
{
tmp[pos]='.';
i++;
pos++;
while( isDigital(file[i]) )
{
tmp[pos]=file[i];
pos++;
i++;
}
}
tmp[pos]='\0';
pos=0;
int sum=0;
int len=strlen(tmp);
int j;
for(j=0;j<len;j++)
{
sum+=(tmp[j]-32)*int(pow(10,len-j));
}
// printf("%s",tmp);
strcpy(myCode[count].num,tmp);
strcpy(myCode[count].ID,"40");
printf("%4s%10s\n",myCode[count].ID,myCode[count].num);
count++;
}//判断整数或者实数
if( isDivide(file[i]) )
{
char tmp[10];
tmp[0]=file[i];
tmp[1]='\0';
// myCode[count].Num=file[i];
strcpy(myCode[count].num,tmp);
strcpy(myCode[count].ID,"01");
printf("%s",tmp);
i++;
count++;
}
if( isOperator(file[i]) )
{
char tmp[10];
// myCode[count].Num=file[i];
tmp[0]=file[i];
tmp[1]='\0';
strcpy(myCode[count].num,tmp);
strcpy(myCode[count].ID,"02");
printf("%4s%10s\n",myCode[count].ID,myCode[count].num);
// printf("%s",tmp);
i++;
count++;
}
if(file[i]=='"' && strFlag==false)//进入字符串常量
{
char tmp1[10];
tmp1[0]='"';
tmp1[1]='\0';
// myCode[count].Num=file[i];
strcpy(myCode[count].num,tmp1);
strcpy(myCode[count].ID,"01");
printf("%4s%10s\n",myCode[count].ID,myCode[count].num);
// printf("%s",tmp1);
i++;
count++;
char tmp[10];//记录常量字符串
int pos=0;
while(!isDivide(file[i]) )
{
tmp[pos]=file[i];
pos++;
i++;
}
tmp[pos]='\0';
// printf("%s",tmp);
int len=strlen(tmp);
int sum=0;
int y;
for(y=0;y<len;y++)
{
sum+=tmp[y];
}
// myCode[count].Num=sum;
strcpy(myCode[count].num,tmp);
strcpy(myCode[count].ID,"42");
printf("%4s%10s\n",myCode[count].ID,myCode[count].num);
count++;
strFlag=true;
}
if(file[i]=='"' && strFlag==true)//出字符串常量
{
char tmp[10];
// myCode[count].Num=file[i];
tmp[0]='"';
tmp[1]='\0';
strcpy(myCode[count].num,tmp);
strcpy(myCode[count].ID,"01");
// printf("%s",tmp);
printf("%4s%10s\n",myCode[count].ID,myCode[count].num);
i++;
count++;
strFlag=false;
}
if(file[i]=='>' || file[i]=='<')
{
char tmp[10];
int iTmp=i;
i++;
if(file[i]=='=')
{
tmp[0]=file[iTmp];
tmp[1]=file[i];
tmp[2]='\0';
strcpy(myCode[count].num,tmp);
strcpy(myCode[count].ID,"01");
printf("%4s%10s\n",myCode[count].ID,myCode[count].num);
i++;
count++;
}
else
{
i=iTmp;
tmp[0]=file[i];
tmp[1]='\0';
strcpy(myCode[count].num,tmp);
strcpy(myCode[count].ID,"01");
printf("%-4s%-10s\n",myCode[count].ID,myCode[count].num);
i++;
count++;
}
}
}//end while
printf("\n----------------------------------------------------\n");
// int h;
// for(h=0;h<count;h++)
// {
// printf("%s%s\n",myCode[h].ID,myCode[h].num);
// }
//-----------------------------------------------------------------------------
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -