概述
/** 题目描述
* 编写一个在数组中进行查找的函数模板
* 其中数组为具有n个元素,类型为T,要查找的元素为key。
* 注意:必须使用模板函数
* 输入:
* 第一行输入t表示有t个测试实例
* 第二行先输入一个大写字母表示数组类型,然后输入n表示数组长度。
* I表示整数类型,D表示双精度数类型,C表示字符型,S表示字符串型;
* 第三行输入n个数据
* 第四行输入key
* 依次输入t个实例
* 输出
* 每行输出一个结果,找到输出key是数组中的第几个元素(从1开始),找不到输出0
* 样例输入:
* 4
* I 5
* 5 3 51 27 9
* 27
* D 3
* -11.3 25.42 13.2
* 2.7
* C 6
* a b g e u q
* a
* S 4
* sandy david eason cindy
* cindy
* 样例输出: 4 0 1 4
*/
代码:
#include <bits/stdc++.h>
using namespace std;
template<class T>
//声明一个模板,类型参数名为T
int Search(T a[],int n,T key) {
//数组a,数组长度n,主元key
T *p=find(a,a+n,key);
//数组什么类型,指针p就要随之变换类型,所以使用模板类创建T *p
if(p-a==n)
return 0;
else
return (p-a)+1;
}
int main() {
int t,i,n;
char a;
cin>>t;
//第一行,表示有t个测试实例
int helper[t];
//创建一个辅助数组,用以存放每组数据的返回值
int j=0;
//帮助辅助数组计数
while(t--) {
cin>>a>>n;
//第二行,a表示数据类型,n表示数组长度
switch(a) {
case 'I': {
//整型
int b[n],c;
//数组b,长度为n;c为我们要找的主元
for(i=0; i<n; i++)
cin>>b[i];
cin>>c;
//主元
helper[j++]=Search(b,n,c);
break;
}
case 'C': {
//字符型
char b[n],c;
for(i=0; i<n; i++)
cin>>b[i];
cin>>c;
helper[j++]=Search(b,n,c);
break;
}
case 'S': {
//字符串型
string b[n],c;
for(i=0; i<n; i++)
cin>>b[i];
cin>>c;
helper[j++]=Search(b,n,c);
break;
}
case 'D': {
//双精度型
double b[n],c;
for(i=0; i<n; i++)
cin>>b[i];
cin>>c;
helper[j++]=Search(b,n,c);
break;
}
}
}
for(auto e :helper)
cout<<e<<" ";
return 0;
}
运行结果:
find()函数是查询重复值的,如果不会的话,用for循环也可以的,这里展示一下for循环的代码:
void Search(T a[],int n,T key) {
int i,j=0;
for(i=0; i<n; i++)
if(a[i]==key) {
j=1;
return i+1;
}
if(j==0)
return 0;
}
结果是一样的。
最后
以上就是发嗲冥王星为你收集整理的编写一个在数组中进行查找的函数模板的全部内容,希望文章能够帮你解决编写一个在数组中进行查找的函数模板所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复