C++ Contest Code preprocessor
大概可以拿来方便拉模板
变量名、语法都是瞎整的你感觉有用随便用好了..
#include<bits/stdc++.h>
using namespace std;
map<string,int>fp;
inline bool is_space(char c){return c==' '||c=='\t';}
bool Strike(char*t,int len,const char*strpat){
	for(int i=0;i<len;++i)
		if(t[i]!=strpat[i])
			return 0;
	return 1;
}
void Copy_File(const char*filename,char*intd){
	FILE*inFile=fopen(filename,"r");
	char*Line_Buffer=new char[1<<20];
	while(!feof(inFile)&&fgets(Line_Buffer,1<<20,inFile)){
		// process line
		printf("%s%s",intd,Line_Buffer);
	}puts("");
}
void Process_File(const char*filename){
	int len=strlen(filename);
	string filename_string(filename,len);
	if(fp[filename])return;
	fp[filename]=1;
	FILE*inFile=fopen(filename,"r");
	char*Line_Buffer=new char[1<<20];
	char*Intend_Buffer=new char[1<<20];
	while(!feof(inFile)&&fgets(Line_Buffer,1<<20,inFile)){
		// process line
		int len=strlen(Line_Buffer),int_siz=0,i=0;
		for(;i<len;++i)
			if(is_space(Line_Buffer[i]))
				Intend_Buffer[int_siz++]=Line_Buffer[i];
			else break;
		if(Strike(Line_Buffer+i,5,"//cp_")){
			// cp detected
			if(Strike(Line_Buffer+i+5,8,"REQUIRE<")){
				int t=i+13,z=0;
				while(t<len&&Line_Buffer[t]!='>')++t,++z;
				char*FileName=new char[z+2];
				memcpy(FileName,Line_Buffer+i+13,z);
				FileName[z]=0;
				Process_File(FileName);
			}else if(Strike(Line_Buffer+i+5,7,"INJECT<")){
				int t=i+12,z=0;
				while(t<len&&Line_Buffer[t]!='>')++t,++z;
				char*FileName=new char[z+2];
				memcpy(FileName,Line_Buffer+i+12,z);
				FileName[z]=0;
				Copy_File(FileName,Intend_Buffer);
			}else printf("%s",Line_Buffer);
		}else printf("%s",Line_Buffer);
	}puts("");
}
int main(int argc,const char**argv){
	if(argc<=1)
		return puts("Usage: [exec_name] \"FileName\""),0;
	Process_File(argv[1]);
//	Process_File("cppptest1.cpp");
	return 0;
}
C++ Contest Code preprocessor的更多相关文章
- WAVE文件格式解析
		WAVE 文件作为Windows多媒体中使用的声音波形文件格式之一,它是以RIFF(Resource Interchange File Format)格式为标准的.这里不针对RIFF文件格式做介绍,不 ... 
- HDU 2096 小明A+B(%的运用)
		传送门: 小明A+B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- 推荐一篇讲arm架构gcc内联汇编的文章
		这是来自ethernut网站的一篇文章,原文链接: http://www.ethernut.de/en/documents/arm-inline-asm.html 另外,据说nut/os是个不错的开源 ... 
- YASM User Manual
		This document is the user manual for the Yasm assembler. It is intended as both an introduction and ... 
- IOCCC(The International Obfuscated C Code Contest)
		国际 C 语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项国际编程赛事,从 1984 年开始,每年举办一次(1997年.1 ... 
- 2015 Multi-University Training Contest 7 hdu 5375 Gray code
		Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ... 
- DISCO Presents Discovery Channel Code Contest 2020 Qual Task E. Majority of Balls
		Not able to solve this problem during the contest (virtual participation). The first observation is ... 
- The North American Invitational Programming Contest 2018     E. Prefix Free Code
		Consider nn initial strings of lower case letters, where no initial string is a prefix of any other ... 
- hdu 3461 Code Lock(并查集)2010 ACM-ICPC Multi-University Training Contest(3)
		想不到这还可以用并查集解,不过后来证明确实可以…… 题意也有些难理解—— 给你一个锁,这个所由n个字母组成,然后这个锁有m个区间,每次可以对一个区间进行操作,并且区间中的所有字母要同时操作.每次操作可 ... 
随机推荐
- MySQL解决中文编码问题
			转载组员博客 地址:MySQL解决中文编码问题 
- linux 编辑文档
			本篇主要分享下vi 命令行的操作: vi /etc/sysconfig/iptabels 首先我们需要理解putty客户端的复制 粘贴 插入文档 退出等命令 复制:指在putty客户端中的选择复制 ... 
- printf("\033[1;33m ***** \033[0m \n");
			printf("\033[1;33m Hello World. \033[0m \n"); 颜色如下: none = "\033[0m" black = &qu ... 
- hihocoder1015  kmp算法
			#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ... 
- docker 学习(1)
			Docker与容器和虚拟机 Docker跟虚拟机有什么区别啊?这个问题可以拆成两部分.因为Docker并不是什么完全独创的技术,而是属于很早便有了的容器技术,所以第一个问题就是容器与虚拟机的区别?同属 ... 
- 二叉树的镜像(Python实现)
			题目 给定一棵二叉树,要求输出其左右翻转后二叉树的中序遍历. 例: 翻转前: 翻转后: 1 | 1 / \ | / \ 2 3 | 3 2 / \ | / \ 4 5 | 5 4 解析 两个步骤: 镜 ... 
- momo不是玩具,.Net雄起
			互联网时代 .NET 会渐渐衰落吗?一个架构师对 .NET 的思考 2015-12-14 11:03 darklx 博客园 字号:T | T 为了更好的适应互联网时代的需求,我们公司已经把我们的 .N ... 
- mysql之面试问题总结
			问题1.char 与varchar的区别? varchar是变长而char的长度是固定的.如果你的内容是固定的大小,char性能更好. char[4] 与varchar[4] 存储字母a a占一个 ... 
- SXCPC2018 nucoj2005 大闹上兰帝国
			超 dark van♂全背包 ref1 ref2 #include <iostream> #include <cstring> #include <cstdio> ... 
- laravel5.2总结--响应
			1 基本响应 1.1 返回一个字符串,指定的字符串会被框架自动转换成 HTTP 响应. Route::get('/', function () { return 'Hello World'; }) ... 
