高手之Convert C++ To C#

转换成C + +到C(将C + +转换为C)(转,高手写的) - 库特龙虾 - 小白菜的博客
 

/ ************************************************* *********************************
 *
 *用途:Conventer C + +到C# 
 方法:使用C#编程语言
 *作者:2005510040 - 凯末尔轪ybakan
 *日期:07.06.2009
 *假设:我不需要任何假设!
 * 
 ************************************************** ******************************** /
使用系统;
引用;
引用;
结;
云计算;
使用System.Text;
使用System.Windows.Forms;
使用System.IO;

命名空间_005510040_Conventer
{
    / ************************************************* **************************** 
    /计划建设​​3个部分。图书馆,课堂,主...
    / - > codeMain()函数
    /图书馆 - > codeLibrary()函数
    / - >类codeClass()函数
    ************************************************** *************************** /
    公众部分类FormCon的:表格
    {
        / *初始化全局变量* / 

        新的RichTextBox的和RichTextBox中rTxtCs =(); / /执行C#代码的富文本框
        私人字符串strSaveFileName; / /保存文件名
        私人字符串类名=“未申报”,/ /如果存在类,把类名
        私人和布尔bLibrary =假; / /这部分库
        私人布尔bClass = TRUE; / /这部分类
        私人布尔bMain = TRUE; / /这部分主要
        私人布尔bUsingSystem = FALSE; / /如果程序正在使用的系统命令
        私人和布尔bPublicPrefix =假; / /如果存在公共变量
        私人和布尔bPrivatePrefix =假; / /如果存在私有变量
        私人和布尔bProtectedPrefix =假; / /如果受保护的变量存在
        私人字符串strPre​​fix的=“”; / /前缀类类型的公共,私人,proctected
        私人诠释iOpenCloseParNum = 0; / /判断打开关闭paranthesis

        / /初始化表单组件
        公共FormCon()
        {
            在InitializeComponent();
        }

        / /关闭程序
        私人的无效btnClose_Click(对象发件人,EventArgs五)
        {
            this.Close();
        }

        / ************************************************* **************************** 
            目的:ConvertToCSharp功能
            输入:按钮参数 
            返回值:返回值无关。
        ************************************************** *************************** /
        私人的无效btnConvertFromCpp_Click(对象发件人,EventArgs五)
        {
            / /转到ConvertToCSharp功能
            rTxtCSharpCode.Text:= ConvertToCSharp(rTxtCppCode)文本;
        }

        / ************************************************* **************************** 
            用途:打开c + +的文件类型和负载的丰富文本文件
            输入:按钮参数
            返回值:返回值无关。它推到堆栈的值 
        ************************************************** *************************** /
        私人的无效btnOpenFileCpp_Click(对象发件人,EventArgs五)
        {
            的字符串chosenFile =“”;

            / /判断打开文件对话框属性
            研究openFileCSharp.Title =“打开一个C + +文件”;
            openFileCSharp.FileName =“”;
            openFileCSharp.Filter =“C + +文件| *。CPP”;

            如果(openFileCSharp.ShowDialog()= DialogResult.Cancel)
            {
                / /如果用户想打开,然后单击“确定”
                chosenFile openFileCSharp.FileName;
                rTxtCppCode.LoadFile(chosenFile,RichTextBoxStreamType.PlainText);
                strSaveFileName = chosenFile;
            }
        }

        / ************************************************* **************************** 
            目的:柬埔寨人民党库转换到C#库
            输入:strLine中(一行丰富的文本框) 
            返回:true - >“确定”,通过主或类的,假 - >去库
        ************************************************** *************************** /
        字符串strLine的私人:BOOL codeLibrary()
        {
            / /转换包括<iostream>使用系统;
            如果(strLine.Trim()。StartsWith(“#”)&&(strLine.ToLower(),含有(“<iostream>”)))
            {
                (bUsingSystem == FALSE)rTxtCs.Text + =“使用”系统“+”\ n“;
                bUsingSystem = TRUE;
                返回false;
            }

            / /将使用System.Windows.Forms#楼得分;
            如果(strLine.Trim()。StartsWith(“#”)&& strLine.ToLower()。包含(“<windows.h>”)== TRUE)
            {
                rTxtCs.Text + =“使用System.Windows.Forms”+“\ n”;
                返回false;
            }

            / /将包括字符串使用System.Text;
            如果(strLine.Trim()StartsWith(“#”)。的&& strLine.ToLower()。(“<字符串>”)== TRUE)
            {
                rTxtCs.Text + =“使用System.Text”+“\ n”;
                返回false;
            }

            / /转换为空白使用命名空间std;
            ((strLine.Trim()。(“使用命名空间std”)| | strLine.Trim()。(“使用std ::”))== TRUE)
            {
                rTxtCs.Text + =“”;
                返回false;
            }

            返回true;
        }

        / ************************************************* **************************** 
            目的:CPP类的代码转换到C#类代码
            输入:strLine中(一行丰富的文本框)
            返回:true - >“确定”,通过主要的,假的 - >去上课
        ************************************************** *************************** /
        私人的布尔codeClass(字符串strLine的)
        {
            整数艾朗;

            / /转换std :: string的字符串;
            (strLine.Trim()包含(“std :: string的”)== TRUE)
            {
                strLine的strLine.Replace(“性病::字符串”,“字符串”);
            }

            / /转换(变量),如果(变量!= 0)
            ,如果(strLine.Trim()。(“如果”)== TRUE,&& strLine.Trim(的)包含(“==”)== FALSE,&& strLine.Trim()。(“=”)==假)
            {
                开始= strLine.IndexOf(“(”);
                完成= strLine.IndexOf(“)”);
                诠释计数=完成 - 开始; / /可变长度
                字符串变量= strLine.Substring(开始+ 1,计数-1);
                strLine的= strLine.Replace(VAR,VAR +“= 0”);
            }

            / /转换类的类名类
            如果(strLine.Trim()包含(“类”)== TRUE,&& strLine.Trim()。(“{”)== FALSE)。
            {
                className的strLine.Substring(6);
                rTxtCs.Text + = strLine.Trim()+“\ n”;
                返回false;
            }

            / /转换类的类名{类
            / / { 
            如果(strLine.Trim()包含(“类”)== TRUE,&& strLine.Trim()。(“{”)== TRUE)
            {
                艾朗= strLine.IndexOf(“{”);
                艾朗=艾朗 - 7;
                className的= strLine.Substring(6,艾朗1);

                艾朗strLine.IndexOf(“{”);
                strLine的:= strLine.Remove(艾朗);

                rTxtCs.Text + = strLine.Trim的()+“\ n”+“{\ n”;
                iOpenCloseParNum + +;
                返回false;
            }

            / /转换的COUT到Console.Write或了Console.Writeline
            ((strLine.Trim()。StartsWith(“法院”)== TRUE)| |(strLine.Trim()。StartsWith(“std :: cout的”)== TRUE))
            {
                strLine的strLine.Replace(“std :: cout的<<”,“\ tConsole.Write(”);
                strLine的strLine.Replace(“法院”,“\ tConsole.Write(”);
                strLine的strLine.Replace(“<<性病:: endl”,“+ \”\ \ n \“);
                strLine中= strLine.Replace(“<< endl”,“+ \”\ \ n \“);
                strLine的strLine.Replace(“std :: cout的<<”,“\ tConsole.Write(”);
                strLine的strLine.Replace(“法院”,“\ tConsole.Write(”);
                strLine中= strLine.Replace(“<< endl”,“+ \”\ \ n \“);
                strLine的strLine.Replace(“<<性病:: endl”,“+ \”\ \ n \“);
                strLine中= strLine.Replace(“;”,“);”);
                strLine中= strLine.Replace(“<<”,“+”);
                rTxtCs.Text + = strLine中+“\ n”;
                返回false;
            }

            / /转换的COUT Console.Read或Console.Readline
            ((strLine.Trim()包含(“CIN”)== TRUE)| |(strLine.Trim()。StartsWith(“CIN >>”)== TRUE))
            {
                strLine的strLine.Replace(“的std :: CIN”“,”“);
                strLine的strLine.Replace(“的std :: CIN”“,”“);
                strLine中= strLine.Replace(“霉素>>”,“”);
                strLine中= strLine.Replace(“;”,“”);
                strLine中= strLine.Replace(“霉素>>”,“”);
                strLine的strLine中+“= Console.ReadLine();”;
                rTxtCs.Text + =“\ t”+ strLine中+“\ n”;
                返回false;
            }

            / /如果strLine的开始};,末级
            如果(strLine.Trim()StartsWith(“}”)== TRUE)。
            {
                / /判断类的类型 
                bPublicPrefix = FALSE;
                bPrivatePrefix = FALSE;
                bProtectedPrefix = FALSE;
                返回true;
            }

            / /如果strLine的开始与公众:
            如果(strLine.Trim()StartsWith(“公共”)== TRUE)。
            {
                / /判断类的类型
                strPre​​fix的=“\ t公众”;
                bPublicPrefix = TRUE;
                bPrivatePrefix = FALSE;
                bProtectedPrefix = FALSE;
                返回false;
            }

            / /如果strLine的开始与私人:
            如果(strLine.Trim()StartsWith(“私人”)== TRUE)。
            {
                / /判断类的类型
                strPre​​fix的=“\ t私人”;
                bPrivatePrefix = TRUE;
                bPublicPrefix = FALSE;
                bProtectedPrefix = FALSE;
                返回false;
            }

            / /如果strLine的启动保护:
            如果(strLine.Trim()。StartsWith(“保护”)== TRUE)
            {
                / /判断类的类型
                strPre​​fix的= \ tprotected“;
                bProtectedPrefix = TRUE;
                bPrivatePrefix = FALSE;
                bPublicPrefix = FALSE;
                返回false;
            }

            / /如果strLine中包含{
            (strLine.Trim()包含(“{”)== TRUE)
            {
                rTxtCs.Text + = strLine中+“\ n”;
                iOpenCloseParNum + +;
                返回false;
            }

            / /如果strLine中包含}
            (strLine.Trim()。(“}”)== TRUE)
            {
                rTxtCs.Text + = strLine中+“\ n”;
                iOpenCloseParNum - ;
                返回false;
            }

            / /如果存在法线除公共,私有,保护
            ((bProtectedPrefix == TRUE | | bPrivatePrefix == TRUE | | bPublicPrefix == TRUE))
            {
                如果(iOpenCloseParNum <3)
                {
                    (iOpenCloseParNum%2 == 0)
                        的rTxtCs.Text + = strLine中+“\ n”; / /无的CLAS类型前缀
                    其他
                        rTxtCs.Text + = strPre​​fix的+ strLine.Trim的()+“\ n”; / /的CLAS类型前缀
                }
                其他 
                {
                    rTxtCs.Text + = strLine中+“\ n”;
                }
                返回false;
            }

            返回true;
        }

        / ************************************************* **************************** 
            目的:人民党主代码转换到C#的主要代码
            输入:strLine中(一行丰富的文本框) 
            返回:true - >“完成”程序,假 - >去上课
        ************************************************** *************************** /
        私人的布尔codeMain(字符串strLine的)
        {
            整数艾朗;

            strLine的开始{/ /如果,转换
            如果(strLine.Trim()。StartsWith(“{”)== TRUE)
            {
                rTxtCs.Text + =“\ t”+ strLine中+“\ n”;
                iOpenCloseParNum + +;
                返回false;
            }

            / / std :: string的转换为字符串 
            (strLine.Trim()包含(“std :: string的”)== TRUE)
            {
                strLine的strLine.Replace(“性病::字符串”,“字符串”);
            }

            / /转换(变量),如果(变量!= 0) 
            ,如果(strLine.Trim()。(“如果”)== TRUE,&& strLine.Trim(的)包含(“==”)== FALSE,&& strLine.Trim()。(“=”)==假)
            {
                开始= strLine.IndexOf(“(”);
                完成= strLine.IndexOf(“)”);
                诠释计数=完成 - 开始; / /变量计数
                字符串变量= strLine.Substring(开始+ 1,计数 - 1);
                strLine的= strLine.Replace(VAR,VAR +“= 0”);
            }

            / /如果strLine的开始},程序结束
            如果(strLine.Trim()StartsWith(“}”)== TRUE)。
            {
                返回false;
            }

            / /如果strLine的开始},减少iOpenCloseParNum;
            (strLine.Trim()。(“}”)== TRUE)
            {
                rTxtCs.Text + =“\ t”+ strLine中+“\ n”;
                iOpenCloseParNum - ;
                返回false;
            }

            / /转换的COUT到Console.Write或了Console.Writeline
            ((strLine.Trim()。StartsWith(“法院”)== TRUE)| |(strLine.Trim()。StartsWith(“std :: cout的”)== TRUE))
            {
                strLine的strLine.Replace(“std :: cout的<<”,“\ tConsole.Write(”);
                strLine的strLine.Replace(“法院”,“\ tConsole.Write(”);
                strLine的strLine.Replace(“<<性病:: endl”,“+ \”\ \ n \“);
                strLine中= strLine.Replace(“<< endl”,“+ \”\ \ n \“);
                strLine的strLine.Replace(“std :: cout的<<”,“\ tConsole.Write(”);
                strLine的strLine.Replace(“法院”,“\ tConsole.Write(”);
                strLine中= strLine.Replace(“<< endl”,“+ \”\ \ n \“);
                strLine的strLine.Replace(“<<性病:: endl”,“+ \”\ \ n \“);
                strLine中= strLine.Replace(“;”,“);”);
                strLine中= strLine.Replace(“<<”,“+”);
                rTxtCs.Text + = strLine中+“\ n”;
                返回false;
            }

            / /转换的COUT Console.Read或Console.Readline
            ((strLine.Trim()包含(“CIN”)== TRUE)| |(strLine.Trim()。StartsWith(“CIN >>”)== TRUE))
            {
                strLine的strLine.Replace(“的std :: CIN”“,”“);
                strLine的strLine.Replace(“的std :: CIN”“,”“);
                strLine中= strLine.Replace(“霉素>>”,“”);
                strLine中= strLine.Replace(“;”,“”);
                strLine中= strLine.Replace(“霉素>>”,“”);
                strLine的strLine中+“= Console.ReadLine();”;
                rTxtCs.Text + =“\ t”+ strLine中+“\ n”;
                返回false;
            }

            / /转换className.subField的为className CL =新的类名();
            ((strLine.Trim()。StartsWith(类名)== TRUE)&&(strLine.Trim()。(“。”)== FALSE))
            {
                strLine中= strLine.Replace(“;”,“=新的”)+ className的+“();”;
                rTxtCs.Text + =“\ t”+ strLine中+“\ n”;
                返回false;
            }

            / /将主要情况
            (strLine.Trim()。(“主要()== TRUE)
            {
                / /如果它contins的{,增加iOpenCloseParNum“
                如果(strLine.Trim()。包含(“{”))iOpenCloseParNum + +;

                rTxtCs.Text + =“\ t”;

                / /例如无效的主要 - >主
                诠释foundS1 strLine.Trim()。的indexOf(“主”);
                strLine中= strLine.Remove(0,foundS1);

                / /主 - >静态无效的主要
                / /() - >(字符串[] ARGS)
                / /(argc,焦炭*的argv) - >(字串[] args)
                串strBackup strLine.Trim()。更换(“主”,“静态无效的主要”)+“\ n”;
                strBackup strBackup.Replace(“()”,“(字串[] args)”);
                strBackup = strBackup.Replace(“(argc,焦炭*的argv)”,“(字串[] args)”);

                / /如果包含,删除,然后把分线 
                (strLine.Trim()。(“{”))
                {
                    来到艾朗strBackup.Trim()。的indexOf(“{”);
                    strBackup:= strBackup.Remove(艾朗);
                    rTxtCs.Text + = strBackup的+“\ n”+“\ t {\ n”;
                }
                其他 
                {
                    rTxtCs.Text + = strBackup的;
                }

                返回false;
            }

            / /把其他线路不改变 
            (strLine.Trim()(“(”)== FALSE)
            {
                rTxtCs.Text + =“\ t”+ strLine中+“\ n”;
                返回false;
            }

            返回true;
        }

        / ************************************************* **************************** 
            目的:CPP到C#编程功能... 
            cpp的代码输入:丰富的文本博尔
            返回:转换cpp的代码为C#编程
        ************************************************** *************************** /
        RichTextBox的rTxtCpp私人:RichTextBox的ConvertToCSharp()
        {
            / *检查命令行* /
            布尔bAccept = FALSE;

            * / / * ------读一步一步用线-------
            (INT I = 0;我<rTxtCpp.Lines.Length,我+ +)
            {
                / /将空行 
                如果(rTxtCpp.Lines [I]。TRIM()==“”)
                {
                    rTxtCs.Text + = rTxtCpp.Lines的[I]。TRIM()+“\ n”;
                }
                / /转换/ /命令  
                否则,如果(rTxtCpp.Lines [I]。TRIM()。StartsWith(“/ /”)== TRUE)
                {
                    rTxtCs.Text + = rTxtCpp.Lines的[我] +“\ n”;
                }
                / /转换/ ** /命令
                否则,如果(rTxtCpp.Lines [I]。TRIM()StartsWith(“/ *”)== TRUE && rTxtCpp.Lines [I]。TRIM()。(“* /”)== FALSE)。
                {
                    rTxtCs.Text + = rTxtCpp.Lines的[我] +“\ n”;
                    bAccept = TRUE;
                }
                / /转换/ ** /命令
                否则,如果(rTxtCpp.Lines [I]。,剪裁()。StartsWith(“/ *”)== TRUE && rTxtCpp.Lines [I]。TRIM()包含(“* /”)== TRUE)
                {
                    rTxtCs.Text + = rTxtCpp.Lines的[我] +“\ n”;
                }
                / /转换/ ** /命令检查bAccept价值
                否则,如果(bAccept == TRUE && rTxtCpp.Lines [I]。TRIM()。包含(“* /”)== FALSE)
                {
                    rTxtCs.Text + = rTxtCpp.Lines的[我] +“\ n”;
                    bAccept = TRUE;
                }
                / /转换/ ** /命令检查bAccept价值
                否则,如果(bAccept == TRUE && rTxtCpp.Lines [I]。TRIM()。包含(“/”)== TRUE)
                {  
                    rTxtCs.Text + = rTxtCpp.Lines的[I]。TRIM()+“\ n”;
                    bAccept = FALSE;
                }
                / /转换图书馆,等级,主要代码
                其他
                {
                    / /如果bLibary是假的,转换bLibrary码 
                    如果(bLibrary == FALSE)
                    {
                        bLibrary = codeLibrary(rTxtCpp.Lines [I]);
                        (bLibrary == TRUE)bClass = FALSE;
                    }

                    / /,如果bClass是假的,转换bClass代码
                    (bClass == FALSE)
                    {
                        bClass = codeClass(rTxtCpp.Lines [I]);
                        (bClass == TRUE)bMain = FALSE;
                    }

                    / /如果bMain是假的,转换bMain码
                    (bMain == FALSE)
                    {
                        bMain = codeMain(rTxtCpp.Lines [I]);
                    }
                }
            }

            / /最后的代码,添加\ n} ... 因为在C + +中,我们已经删除了};
            如果(iOpenCloseParNum == 1)
            {
                rTxtCs.Text + =“\ n”;
            }

            返回rTxtCs;
        }

        / ************************************************* **************************** 
            目的:保存转换后的CPP文件中。另存为CSHARP
            输入:保存文件对话框参数
            返回值:返回值无关。
        ************************************************** *************************** /
        私人的无效btnSaveFileCSharp_Click(对象发件人,EventArgs五)
        {
            流MyStream的;

            saveFileCSharp.Filter =“C#文件(*。CS)| *。条款|头文件(*。H)| * H”;
            saveFileCSharp.FileName strSaveFileName;
            saveFileCSharp.RestoreDirectory = TRUE;

            如果(saveFileCSharp.ShowDialog()== DialogResult.OK)
            {
                ((MyStream的saveFileCSharp.OpenFile())!= NULL)
                {
                    StreamWriter的wText =新的StreamWriter的(MyStream的);

                    wText.Write(rTxtCSharpCode.Text);

                    myStream.Close();
                }
            }

        }

        / ************************************************* **************************** 
            目的:如果用户新的代码转换,清洗和初始化所有的变量
            输入:按钮参数
            返回值:返回值无关。
        ************************************************** *************************** /
        私人的无效btnClear_Click(对象发件人,EventArgs五)
        {
            rTxtCppCode.Text =“”;
            rTxtCSharpCode.Text =“”;
            rTxtCppCode.Text =“”;
            rTxtCs.Text =“”;

            / * - 转换CPP到C#编程 - * /
            strSaveFileName =“”;
            类名=“未申报”;
            bLibrary = FALSE;
            bClass = TRUE;
            bMain = TRUE;
            bUsingSystem = FALSE;
            bPublicPrefix = FALSE;
            bPrivatePrefix = FALSE;
            bProtectedPrefix = FALSE;
            strPre​​fix的=“”;
            iOpenCloseParNum = 0;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值