1
已解决
吴庞茂旭
资深光能
资深光能
/*
NAME:Cc++ (Chinese C++)
NODE/TIPS:
测试用例:
//Cc++演示
导入 标准库
导入 微软库
导入 扩展库
//以下为小头文件展示(但话说标准库多香啊)
导入 标准流
ENDL//换行
ENDL
宏定义 Cc++ 替换为 good
命名空间为 标准空间
ENDL
主函数{
无符号型 整型 #关注#=666888
有符号型 整型 #点赞#=111111
返回值为 0
}
END
*/
//std
#include <bits/stdc++.h>
#include <windows.h>
#define int long long
using namespace std;
string code;
map<string,string> ctoe;//翻译连接
map<string,string> ini;//变量连接
vector<string> box;//存储已有的可替换串
string itos(int n){
string s="";
while(n){
s=char(n%10+'0')+s;
n/=10;
}
return s;
}
string getname();//给变量取名
void inte();//处理Cc++中的变量、函数问题
void build();
void repet();
void nice();//去除行首行尾空格
void fh();//添加分号
void pushtab();//添加tab
signed main(){
build();
string c;
while(getline(cin,c)){
if(c=="END")break;
if(c.empty())continue;
code+=" "+c+"\n";
}
inte();
repet();
nice();
fh();
pushtab();
cout<<code;
return 0;
}
string getname(){
static int n=1;
return "v"+itos(n++);
}
void inte(){
int p1=code.find("#");
int p2=code.find("#",p1+1);
while(p1!=-1&&p2!=-1){
//中间一定就是变量了
string s=code.substr(p1+1,p2-p1-1);
if(!ini.count(s))ini[s]=getname();//取名
code.replace(p1,p2-p1+1,ini[s]);
p1=code.find("#",p2+1);
p2=code.find("#",p1+1);
}
}
void build(){
//存储
box.push_back(" ENDL");
box.push_back(" 主函数");
box.push_back(" 整型");
box.push_back(" 有符号型");
box.push_back(" 无符号型");
box.push_back(" 返回值为");
box.push_back(" 导入");
box.push_back(" 标准库");
box.push_back(" 扩展库");
box.push_back(" 微软库");
box.push_back(" 命名空间为");
box.push_back(" 标准空间");
box.push_back(" 宏定义");
box.push_back(" 替换为");
box.push_back(" 标准流");
box.push_back(" 输入");
//其他中文集成
ctoe[" ENDL"]="";
ctoe[" 主函数"]="sgined main()";
//关键词集成
ctoe[" 整型"]="int ";
ctoe[" 有符号型"]="signed ";
ctoe[" 无符号型"]="unsigned ";
ctoe[" 返回值为"]="return ";
//标准头文件集成
ctoe[" 导入"]="#include";
ctoe[" 标准库"]="<bits/stdc++.h>";
ctoe[" 扩展库"]="<conio.h>";
ctoe[" 微软库"]="<windows.h>";
ctoe[" 命名空间为"]="using namespace ";
ctoe[" 标准空间"]="std";
ctoe[" 宏定义"]="#define";
ctoe[" 替换为"]="";
//标准流文件集成
ctoe[" 标准流"]="<iostream>";
ctoe[" 输入"]="cin>>";
}
void repet(){
for(int i=0;i<box.size();i++){
string c=box[i];
int p=code.find(c);
while(p!=-1){
code.replace(p,c.size(),ctoe[c]);
p=code.find(c,p+ctoe[c].size());
}
}
}
void nice(){
signed p1=0,p2=code.find("\n");
while(p2!=-1){
while(code[p1]==' '){
code.erase(p1,1);
p2--;
}
while(code[p2-1]==' '){
code.erase(p2-1,1);
p2--;
}
p1=p2+1,p2=code.find("\n",p2+1);
}
}
void fh(){
signed p1=0,p2=code.find("\n");
while(p2!=-1){
if(code[p1]!='#'&&code[p1]!='/'&&code[p1]!='\n'&&code[p2-1]!='{')code.insert(p2,";"),
p1=p2+2,p2=code.find("\n",p2+2);
else p1=p2+1,p2=code.find("\n",p2+1);
}
}
void pushtab(){
/* TODO (#1#): 增加tab。思路:匹配大括号,并且在匹配
的大括号中写入tab。 */
}