CF200D Programming Language

先说几句

这题只是一道很恶心的字符串处理。放轻松,没有什么深奥的算法。也考察了对于结构体的理解。

解题思路

先建立一个结构体。结构体的第一个成员是函数的名称,第二个成员是函数的参数类型列表。用 vector 存储。

首先输入 n1,是函数的数量。特别注意,如果下面要 getling 输入字符串,要用

把换行符吃掉。

特别注意,以下三个部分的调用,都用可读取空格的 getline 函数。

具体写法:

Part 1 读入函数

先 getline 一个字符串,称之为 s

先去除字符串最前面的空格。

再用 erase 函数去掉函数类型 void。

再次去除最前面的空格。

在读到表示参数的左括号前,先将函数名保存下来。 还是注意,要忽略空格。

将当前函数的 name 先保存进函数的结构体数组。

接下来,对于每个字符,只要其不是 空格,逗号,右括号 就将其加入当前函数的参数列表中。

遇到逗号,就说明马上要开始有一个新参数了。

遇到右括号,那么当前函数的处理就大功告成了!

Part 2 读入变量

还是相同的方法,读入 n2 这边的处理比上面简单多了。只要用

就可以读进变量类型和变量名称。用一个哈希表 map,就可以存储变量的相关信息。

Part 3 处理调用

按照 Part 1 的类似办法,读入每一个处理调用信息。 读取函数名和实参列表。

先令 cnt=0。

在函数库中寻找该函数名所对应的函数,遇到函数名相同的,判断参数数量和类型是否相同。我的程序中用了重载 == 运算符来判断。

对于百搭的 T 类型,可以直接 continue 掉。我的另外一篇题解有这种思路的详细解释。

只要匹配上的函数库中的函数,cnt++。对于每一个提问,输出 cnt 即可。

这样,你就可以写出程序了!

奉上代码

千万不要抄,小心棕名!


All Rights Reserved 2022 Wang Zhanrui