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/
转载文章受原作者版权保护。转载请注明原作者出处!