问题标题: Cc++(CodersClub持续更新)

1
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。 */

}

 


0
已采纳
薛乘志
薛乘志
初级启示者
初级启示者

很好,建议加入更多关键字和 函数功能

0
0
0
0
我要回答