之前版本:

新版本:

/// <summary>
        /// 记录代码中的括号,尖括号,方括号,大括号的配对位置,注释中的不记录。
        /// </summary>
        /// <param name="sText"></param>
        /// <param name="C_ExplanatoryNote_Pos">注释位置</param>
        /// <returns></returns>
        /// 创建时间: 2022-08-26      最后一次修改时间:2022-10-01
        public static DList_<Pair_<int, int>> _Syntax_C_FindBrackets(this string sText)
        {

//注释用空格代替
            string sReplace = sText._Syntax_C_Replace_ExplanatoryNote();

//找出所有的 (, <, [,{ 然后配对
            string sLeft = "(<[{";

DList_<Pair_<int, int>> dLeft = new DList_<Pair_<int, int>>();

for (int i = 0; i < sReplace.Length; ++i)
            {
                char cLeft = sReplace[i];

if(sLeft.IndexOf(cLeft) != -1)
                {
                    dLeft.Add(new Pair_<int, int>(i, -1));
                }     
            }

//查找配对
            DListNote_<Pair_<int, int>> pNote = dLeft.First;

while (pNote != null)
            {
                Pair_<int, int> p = pNote.Data;

p.Second = _Syntax_C_NextBrackets(sReplace, p.First);

pNote = pNote.Next;
            }

DList_<Pair_<int, int>> dResult = new DList_<Pair_<int, int>>();

pNote = dLeft.First;

while (pNote != null)
            {
                Pair_<int, int> p = pNote.Data;

if (p.Second != -1)
                    dResult.Add(p);

pNote = pNote.Next;
            }

return dResult;
        }

        /// <summary>
        /// 把C++代码中的注释用空格代替
        /// </summary>
        /// <param name="sText"></param>
        /// <returns></returns>
        /// 创建时间: 2022-09-01      最后一次修改时间:2022-09-01 
        public static string _Syntax_C_Replace_ExplanatoryNote(this string sText)
        {
            StringBuilder sb = new StringBuilder(sText.Length);

            DList_<Pair_<int, int>> enp = _Syntax_C_ExplanatoryNote_Pos(sText);

            for(int i = 0; i < sText.Length; ++i)
            {
                Boolean bFind = false;
                foreach (Pair_<int, int> p in enp)
                {
                    if( i >= p.First && i <= p.First + p.Second) //p.Second 是长度
                    {
                        bFind = true;
                      
                        break;
                    }
                }

                if (bFind)
                    sb.Append(' ');
                else
                    sb.Append(sText[i]);
            }
            return sb.ToString();
        }

/// <summary>
        /// 记录注释的位置和长度
        /// </summary>
        /// <param name="sText"></param>
        /// <returns></returns>
        /// 创建时间: 2022-08-26      最后一次修改时间:2022-08-26
        public static DList_<Pair_<int,int>> _Syntax_C_ExplanatoryNote_Pos(this string sText)
        {
            DList_<Pair_<int, int>> dResult = new DList_<Pair_<int, int>>();

for (int i = 0; i < sText.Length; ++i)
            {
                if (sText[i] == '/')
                {
                    if (i + 1 < sText.Length)
                    {
                        if (sText[i + 1] == '/')
                        {
                            int nStart = i;

i = sText.IndexOf('\n', i + 1);

if (i == -1)
                            {
                                dResult.Add(new Pair_<int, int>(nStart, sText.Length - i));
                                break;
                            }
                            else
                            {
                                dResult.Add(new Pair_<int, int>(nStart, i - nStart));
                            }
                        }
                        else if (sText[i + 1] == '*')
                        {
                            int nStart = i;
                            i = sText.IndexOf("*/", i + 1);
                            if (i == -1)
                            {
                                dResult.Add(new Pair_<int, int>(nStart, sText.Length - i));
                                break;
                            }
                            else
                            {
                                dResult.Add(new Pair_<int, int>(nStart, i - nStart + 2));
                            }
                        }
                    }
                }
            }

return dResult;
        }

记录代码中的括号,尖括号,方括号,大括号的配对位置,忽略注释。相关推荐

  1. java 正则 尖括号_使用JS正则表达式替换括号,尖括号等

    如下所示:function toTxt(str) { var RexStr = /\|\"|\'|\&/g str = str.replace(RexStr, function(Ma ...

  2. 关于vue文件中template标签尖括号下的红波浪线问题

    首先,vscode今天突然出现这个问题,所有的template标签都被标红 ​​​​​​​        ​​​​​​​         查找百度说修改.eslintrc.js的数据 在其中的pars ...

  3. 如何在html页面中左尖括号,想要在HTML中显示一个尖括号“

    [判断题]教学评价就是在期末的时候给学生打分数. [判断题]面包中放不放盐都可以. ( ) [多选题]十五.企业存货成本的构成包括( ) [多选题]伤寒.金匮.温病中均有治疗热证便秘的经方,以下按病性 ...

  4. xml中的sql 标签中应使用 尖括号,感叹号 注释. 其他方式会被当成sql语句执行.

    xml中的sql 标签中应使用<!----> 注释. 其他方式会被当成sql语句执行.  如下

  5. C++中带有空尖括号的template <>

    结论:template<>告诉编译器遵循模板特化,特别是完全特化 通常,class A看起来像这样: template<class T> class A{// general ...

  6. jQuery中选择器加尖括号的区别

    $("img")为一个get的方法,是读取标签为"img"元素的属性及设置相应的属性: $("<img/>")为一个set的方法 ...

  7. java中向上的尖括号是什么,什么lt; Tgt; (尖括号)在Java中是什么意思?

    I am currently studying Java and have recently been stumped by angle brackets(<>). What exactl ...

  8. oracle 尖括号_关于方括号和尖括号的区别

    1. []:内的内容意思是:可写可不写 例如:/home下就一个list 文件,使用ls --help中的 Usage: ls [OPTION]... [FILE]... 2. {}:那就必须要在{} ...

  9. 命令行说明中方括号、尖括号的含义

    命令行说明中方括号.尖括号的含义 命令行语法中,某些字符与格式有着特殊的含义,下面主要针对[].<>.|.-等符号进行说明: 一.方括号[ ] 方括号([ ])表示里面的元素(参数.值或信 ...

最新文章

  1. mysql trigger before insert_在MYSQL中创建一个BEFORE INSERT TRIGGER
  2. Linux下的摄影后期处理软件
  3. vsftp建立虚拟用户不同目录分配不同权限操作步骤详解
  4. 第3章 Linux内核调试手段之三
  5. 信息学奥赛一本通(2063:【例1.4】牛吃牧草)
  6. epoll实现socket通信
  7. 内置模块(time、random、hashlib、os)
  8. 数据结构最短路径例题_数据结构(五)图---最短路径(迪杰斯特拉算法)
  9. c语言编程 设计密码锁,如何设计最简单的密码锁程序
  10. android 渐变蒙版_干货分享(第八期):PS蒙版教学,利用蒙版制造渐隐效果
  11. 算数平均数\几何平均数\调和平均数
  12. 已知一点经纬度及与另一点距离和航向,求另一点经纬度
  13. load average 计算
  14. 逆序字符串 和 字符串的逆序输出 的区别~
  15. 《安富莱嵌入式周报》第287期:下一代Windows12界面,支持各种工业以太网协议参考,百款在线电子开发工具,seL4安全微内核,旋转拨号手机,PSP掌机逆向
  16. CentOS6.5下搭建LAMP+FreeRadius+Daloradius Web管理和TP-LINK路由器、H3C交换机连接,实现,上网认证和记账功能
  17. 左右滑动日历(微信小程序)
  18. bootstrap4.0图标使用_很不错的两款Bootstrap Icon图标选择组件
  19. 微信小程序中的iPhone X适配问题
  20. 【常见问题】03 开虚拟机导致电脑蓝屏

热门文章

  1. MD5算法C语言实现
  2. java起socket监听,java socket 监听示例,javasocket,java socket监
  3. Linux下ORACLE 使用dblink连接mysql
  4. android 日历 农历算法
  5. 广发样样行这样用才安全!
  6. AR技术的应用和限制
  7. html2canvas截取图片不完整,html2canvas关于图片不能一般截取
  8. yzm10铺瓷砖 yzm10原创系列
  9. 二连杆机械臂角度解算
  10. 用Matlab进行部分分式展开