悬关求hack
查看原帖
悬关求hack
761125
Milthm楼主2023/6/30 12:21

三个关注,求hack

#include<iostream>
#include<cstring>
using namespace std;
char res[50][50]={"and","break","do","else","elseif","end","false",
"for","function","if","in","local","nil","not","or","repeat","return",
"then","true","until","while"};
char symbol[50][5]={"+","-","*","/","%","^","#","==",">=",
"<=",">","<","~=","(",")","{","}","[","]",";",":",",","...","..",".","="};
char s[1000005];
int n;
int is_res(int pos){
	for(int i=0;i<21;++i){
		int q=pos;
		for(int j=0;res[i][j]!='\0';++j){
			if(s[pos+j]!=res[i][j])goto R;
			++q;
		}
		if(s[q]>='a'&&s[q]>='z'||s[q]>='A'&&s[q]<='Z')continue;
		cout<<"[RESERVED] "<<res[i]<<'\n';
		return q-1;
		R:;
	}
	return 0;
}
int is_number(int pos){
	if(!(s[pos]>='0'&&s[pos]<='9'||s[pos]=='.'))return 0;
	if(s[pos]=='.'&&!(s[pos+1]>='0'&&s[pos+1]<='9'))return 0;
	if(s[pos]=='0'&&(s[pos+1]=='x'||s[pos+1]=='X')){
		for(int i=pos+2;;++i){
			if(!(s[i]>='0'&&s[i]<='9'||s[i]>='a'&&s[i]<='f'||s[i]>='A'&&s[i]<='F')){
				cout<<"[NUMBER] ";
				for(int j=pos;j<i;++j){
					cout<<s[j];
				}
				cout<<'\n';
				return i-1;
			}
		}
	}
	else{
		bool dot=0,e=0;
		for(int i=pos;;++i){
			if((s[i]=='+'||s[i]=='-')&&s[i-1]=='e')continue;
			if((e&&s[i]=='e')||(dot&&s[i]=='.')||(s[i]!='.'&&s[i]!='e'&&!(s[i]>='0'&&s[i]<='9'))){
				cout<<"[NUMBER] ";
				for(int j=pos;j<i;++j)cout<<s[j];
				cout<<'\n';
				return i-1;
			}
			if(s[i]=='.')dot=1;
			if(dot&&s[i]=='e')e=1;
		}
		cout<<"[NUMBER] ";
		for(int i=pos;;++i){
			if(!(s[i]>='0'&&s[i]<='9')){
				cout<<'\n';
				return i-1;
			}
			cout<<s[i];
		}
	}
}
int is_str(int pos){
	if(s[pos]!='\"'&&s[pos]!='\'')return 0;
	int i;
	cout<<"[STRING] ";
	cout<<s[pos];
	for(i=pos+1;i<n&&s[i]!=s[pos];++i){
		cout<<s[i];
		if(s[i]=='\\')cout<<s[++i];
	}	
	cout<<s[pos]<<'\n';
	return i;
}
int is_symbol(int pos){
	for(int i=0;i<26;++i){
		int q=pos;
		for(int j=0;symbol[i][j]!='\0';++j){
			if(s[pos+j]!=symbol[i][j])goto R;
			++q;
		}
		cout<<"[SYMBOL] "<<symbol[i]<<'\n';
		return q-1;
		R:;
	}
	return 0;
}
int is_name(int pos){
	if(!(s[pos]>='a'&&s[pos]<='z'||s[pos]>='A'&&s[pos]<='Z'))return 0;
	cout<<"[NAME] ";
	for(int i=pos;i<=n;++i){
		if(!(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'||
		s[i]>='0'&&s[i]<='9'||s[i]=='_')){
			cout<<'\n';
			return i-1;
		}
		cout<<s[i];
	}
}
int is_comment(int pos){
	if(s[pos]!='-'||s[pos+1]!='-')return 0;
	for(int i=pos;;++i){
		if(s[i]=='\n')return i-1;
	}
}
int main(){
	while((s[++n]=getchar())!=EOF);
	--n;
	for(int i=1;i<=n;++i){
		//cout<<i<<endl;
		if(s[i]=='\n'||s[i]=='\r'){
			cout<<"[EOL]\n";
			continue; 
		}
		if(s[i]==' ')continue;
		int p=is_comment(i);
		if(p)i=p;
		else{
			p=is_number(i);
			if(p)i=p;
			else{
				p=is_str(i);
				if(p)i=p;
				else{
					p=is_symbol(i);
					if(p)i=p;
					else{
						p=is_res(i);
						if(p)i=p;
						else{
							p=is_name(i);
							i=p;
						} 
					}
				}
			}
		}
	}
	return 0;
} 
2023/6/30 12:21
加载中...