使用哈希表来模拟函数的重载和调用。我们可以将函数的名字和参数类型组合作为哈希表的键,函数的返回类型作为哈希表的值。这样,我们就可以在O(1)的时间复杂度内完成函数的创建和调用。
具体的步骤如下:
创建一个哈希表mp来存储函数的名字和参数类型组合,以及另一个哈希表name来存储函数的名字。
对于每一个操作,首先解析输入的字符串,获取函数的名字、参数类型和返回类型。
如果是创建函数的操作,首先检查mp中是否已经存在相同的名字和参数类型组合,如果存在,则输出"redefinition of xxx.",否则,将这个组合添加到mp中,并将函数的名字添加到name中,然后输出"Yes."。
如果是调用函数的操作,首先检查mp中是否存在相同的名字和参数类型组合,如果存在,则输出"Yes.",否则,检查name中是否存在相同的名字,如果存在,则输出"xxx was not declared in this scope.",否则,输出"There is no function xxx."。
n = int(input())
mp = dict()
name = dict()
for i in range(n):
t = int(input())
if t == 1:
s = input().split('(')
pre = s[0].split()
suf = s[1][:-1].split(',')
str = pre[1]
par = []
for i in range(len(suf)):
if suf[i] == '':
continue
par.append(suf[i].split()[0])
# par.sort()
for i in range(len(par)):
str += par[i]
if mp.get(str, 0) == 0:
mp.setdefault(str, 1)
name.setdefault(pre[1], 1)
print('Yes.')
else:
print("redefinition of "+ pre[1] + ".")
else:
s = input().split('(')
par = s[1][:-1].split(',')
str = s[0]
for i in range(len(par)):
if par[i] == '':
continue
str += par[i].split()[0]
if mp.get(str, 0) != 0:
print('Yes.')
else:
if name.get(s[0], 0) != 0:
print(s[0] + " was not declared in this scope.")
else:
print("There is no function " + s[0] + ".")
请你模拟函数的重载和调用
1.创建一个方法: 输入的格式为:“返回类型 方法名(变量类型1 变量名1,变量类型2 变量名2......)”,函数体省略。
2调用一个方法 输入的格式为:"方法名(变量类型1,变量类型2......)”。
请你在每次操作后给出系统反馈。
1.创建方法时,若创建成功,则输出一个字符串"Yes."。否则输出一个字符串"redefinition of xxx."
2 调用方法时 若调用成功 则输H一个字符串"Yes." 若方法名不存在,则输出"There is no function xxx."。若方法名存在但方法内部的变量类型错误,则输出"xxx was not declared in this scope."
第一行输入一个正整数q,代表操作次数。
接下来的2∗q行,每2行代表一次操作。
第一行为一个正整数op,代表操作类型
第二行为一个字符串,代表一次操作。
1≤q≤100
1≤op≤2
操作的字符串长度不超过100,且格式保证合法。
输出q行字符串,代表每次操作系统的反馈。
输入
7
1
void f(int x)
1
int g(int x,String s)
2
f(String)
1
void f(double x,double y)
2
f(double,double)
2
s(int,String)
1
void f(int y)
输出
Yes.
Yes.
f was not declared in this scope.
Yes.
Yes.
There is no function s.
redefinition of f.