1 条题解
-
0
自动搬运
来自洛谷,原作者为

Alex_Wei
**搬运于
2025-08-24 21:36:58,当前版本为作者最后更新于2019-01-29 22:32:04,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这是一道模拟题,有些细节需要注意。
主要思路:
声明一个结构体 :里面装一个字符串(函数名)和一个 类型的 。
再用一个 类型的 存储答案,最后输出它的大小即可。
-
判断是否重复:如果参数个数一样,函数名字相同,且每个参数类型相同,那么这两个函数就相同。
-
可以单独写函数来输入并处理参数,这样程序可读性更高。
实现细节见代码:
#include<bits/stdc++.h> using namespace std; #define pb push_back struct fact{ string na;//函数名 vector <int> para;//由于不知道参数个数,所以最好用vector存参数类型 }; int n; vector <fact> ans;//答案 int strcmp(string a,string b)//判断两个字符串是否相同(因为不会用现成函数,所以只好手写strcmp) { if(a.size()!=b.size())return 0; for(int x=0;x<a.size();x++)if(a[x]!=b[x])return 0; return 1; } vector <int> getpara()//获取参数类型的函数 { string p; int pc=0;//0:数字,1:字符 vector <int> para;//各个所输入参数的类型 getline(cin,p);//由于有空格,所以需要用getline for(int x=0;x<p.size();x++){ if(p[x]==','||p[x]==')')para.pb(pc),pc=0;//一个参数结束,将它的类型压入vector if(p[x]==39)pc=1;//如果有单引号,那么这个参数就是字符类型 } return para;//返回所有参数类型 } int main() { cin>>n; for(int x=1;x<=n;x++){ string na;//函数名 cin>>na; for(int y=0;y<na.size();y++)if(na[y]<'a')na[y]+=32;//都转为小写 if(strcmp(na,"main"))continue;//判断是否是 "main" 函数 int same=1;//same:是否重复 vector <int> para=getpara();//获取参数类型 for(int y=0;y<ans.size();y++){//和已有答案去重 fact cmp=ans[y]; if(cmp.para.size()!=para.size()||!strcmp(cmp.na,na))same=0;//参数个数不同或函数名不同 else for(int z=0;z<cmp.para.size();z++) if(cmp.para[z]!=para[z])same=0;//参数类型不同 } if(!same||x==1)ans.pb((fact){na,para});//如果不重复或者才调用第一个函数,那就把这个函数压入答案 } cout<<ans.size(); return 0; }添加 ,美化文章。
-
- 1
信息
- ID
- 1379
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者