函数调用过程中所有参数的提取

1. 引言

曾经遇到一个面试题:如何将函数调用看作一个字符串,提取出所有的参数并构建成一个树。

比如输入字符串 func1(123, 456), 输出是

输入字符串 func1(123, 456, func2(78, 99)) 输出则是

面试过程中,假设了函数调用肯定是合法的,即函数左右括号肯定匹配,函数参数都是double 或者 int 等数值类型。

由于存在这样的假设前提,题目已经变得相对简单多,但是实际项目中函数的参数是多种多样的,参数可以是String 类型,并且实参包含逗号或者左右括号都是可能的。

非常巧的是最近在项目中就遇到了类似的算法,需要将函数调用过程中所有满足一定格式的参数提取出来,当然参数有字符串并以单引号为开头结尾。但是单引号不再包含单引号。

今天就给出一个针对函数所有参数提取的C#实现。

2. 代码实现

首先给出了一个简单的Tree类的定义,熟悉C++的同学肯定不陌生,这里用C#实现:

定义函数:判断参数是不是嵌套的函数调用,例如函数参数只可能是以下类型,

数值类型: 123 或者 56.87

字符类型: ‘fake parameter’ 或者 ‘fake paramter with left bracket ( or right bracket ).’

嵌套函数: funcx(34,78, ‘dd’) 或者 funcy()

定义函数:获取函数所有未分割的参数,例如

“func1(123, 456)”=> “123, 456”

“func1(123, 456, func2(78, 99))”=> “123, 456, func2(78, 99)”

调用函数:

最后是提取Function 所有参数的函数实现:

测试用例:

3. 结论

如果给出的算法有错误或者有更好的算法 请各位支出。

Original: https://www.cnblogs.com/VectorZhang/p/5447524.html
Author: 禅宗花园…迷失的佛
Title: 函数调用过程中所有参数的提取

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572576/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • IDEA用maven创建springMVC项目和配置(XML配置和Java配置)

    1、DEA创建项目新建一个maven project,并且选择webapp原型。 然后点击next 这里的GroupId和ArtifactID随意填写,但是ArtifactID最好…

    Java 2023年6月5日
    076
  • Python实践项目2

    #南昌理工学院人工智能学院实验室WORKSHOP实践项目 import time import random SCRIPT_NPC_SCHOOL_SISTER = [‘你好!’, …

    Java 2023年6月9日
    063
  • springboot操作rabbitmq

    1:新建amqp-demo工程并添加依赖 2:新建producer模块 (1)application.properties (2)RabbitMQConfig.java (3)Ra…

    Java 2023年5月30日
    067
  • 用emacs org-mode写cnblogs博客(续)

    3 发文中的博客代码格式背景的问题 在书写博客时,可以使用org自带的 {#+BEGIN_CENTER #+END_CENTER}功能调整文字,图片居中。使用{#+BEGIN_SR…

    Java 2023年6月7日
    0117
  • Mysql的驱动表 被驱动表 join buffer

    1.为什么小表驱动大表: for(int i=5;…….){     for(int j=1000;……)     {}} 1.1如果小的循环在外层,对于数据库连接…

    Java 2023年6月6日
    079
  • Nginx常见问题

    基于端口的虚拟机: 使用端口来区分,浏览器使用域名或ip地址:端口号 访问。 注意:~ 代表自己输入的英文字母。 16、location正则案例 1 #优先级1,精确匹配,根路径 …

    Java 2023年6月5日
    073
  • day04-3服务器推送新闻

    多用户即时通讯系统04 4.编码实现03 4.7功能实现-服务器推送消息功能实现 4.7.1思路分析 服务器推送新闻,本质其实就是群发消息 在服务器启动一个独立线程,专门负责推送新…

    Java 2023年6月15日
    0101
  • 深入理解Apollo核心机制之灰度发布——创建灰度

    概述 ApolloPortal创建灰度后都做了什么呢?Apollo是如何维护主版本与灰度版本关系的呢? 其实创建灰度非常简单,可以看到下图中”Cluster&#8221…

    Java 2023年6月6日
    064
  • 内部类

    内部类 基本介绍:一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class)。是我们类的第五大成员[类的五大成员:属性、方法、构造器、代码块、内部类],…

    Java 2023年6月5日
    070
  • 免费正版 IntelliJ IDEA license 详细指南

    一、前言 IntelliJ IDEA 一直是我非常喜欢的 IDE 自从用上之后就回不了头了,但是 Ultimate 版本的费用十分昂贵,其实 JetBrains 自己就提供了6种免…

    Java 2023年6月6日
    0102
  • SpringBoot Spring Security 核心组件 认证流程 用户权限信息获取详细讲解

    前言 Spring Security 是一个安全框架, 可以简单地认为 Spring Security 是放在用户和 Spring 应用之间的一个安全屏障, 每一个 web 请求都…

    Java 2023年6月13日
    073
  • CSharp: Factory Method Pattern in donet core 3

    调用: 输出: Original: https://www.cnblogs.com/geovindu/p/16753568.htmlAuthor: ®Geovin Du Dream…

    Java 2023年6月16日
    088
  • JAVA的变量与常量

    实践是唯一的真理。 变量 变量的定义 变量就是可以变化的量。 JAVA变量是程序中最基础的程序单元,其要素包括变量名,变量类型及作用域。 写程序要注意程序的可读性 如图所示,可以一…

    Java 2023年6月9日
    074
  • 给IDEA道个歉,这不是它的BUG,而是反编译插件的BUG。

    你好呀,我是歪歪。 主要描述了在 IDEA 里面反编译后的 class 文件中有这样的代码片段: 很明显,这玩意就是一个语法错误。 但是当我用其他的编译器打开之后,显示又是正常的。…

    Java 2023年6月5日
    058
  • SpringBoot使用自定义注解+AOP+Redis实现接口限流

    为什么要限流 系统在设计的时候,我们会有一个系统的预估容量,长时间超过系统能承受的TPS/QPS阈值,系统有可能会被压垮,最终导致整个服务不可用。为了避免这种情况,我们就需要对接口…

    Java 2023年6月16日
    063
  • (转)白话数字签名(1)——基本原理

    摘要本系列通过通俗易懂的讲解,让您就像读小说一般,轻轻松松就能理解数字签名的基本原理和应用方法(即使您是一个并不精通计算机的企业老总,也能读懂本篇文章)。然后我们再逐步深入技术细节…

    Java 2023年6月15日
    0115
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球