题目描述
编制如下两个函数模板,用于完成所指定的功能;并编制主函数对它们进行调用:
template <class T> Print(T *p, int n) {...}
template <class T> void GtLever(T *p, int n, T lever){...}
其中,函数模板Print将数组p的前n个元素显示在屏幕上;函数模板Gtlever将p数组前n个元素中大于lever的各个元素, 依次移动到该数组的最前部,而后通过调用Print将p中大于lever的各元素显示在屏幕上。对于char型变量,按对应的ascii码比较大小。
输入
输入一共有两行,第一行为输入数组类型 (只需考虑int, float, char),数组长度,n的取值; 第二行为数组每一位的取值,lever的取值。
输出
输出有一行,数组前n个元素中大于lever的项(保持原有的顺序)
样例输入
char 5 5
a b c d e b
样例输出
c d e
#include <iostream>
using namespace std;
//函数模板就是用来指代一些待定的参数类型
template<class T>
void Print(T *p, int n) //打印数组p前n个元素
{
for (int i = 0; i < n; ++i)
cout << p[i] << " ";
}
template<class T>
void GtLever(T *p, int n, T lever) //将p数组中大于lever的元素移动到前面,然后打印出来
{
int j = 0; //记录大于lever的元素的个数
for (int i = 0; i < n; ++i) {
if (p[i] > lever) {
swap(p[i], p[j]);//从前向后按顺序移动
++j;
}
}
Print(p, j);
}
int main() {
string type;
cin >> type;
int amount, n;
cin >> amount >> n;
if (type == "int") { //将数组d_arr的元素初始化为0
int *d_arr = new int[amount]();
int lever;
for (int i = 0; i < amount; ++i) {
cin >> d_arr[i];
}
cin >> lever;
GtLever(d_arr, n, lever);
delete[] d_arr;
} else if (type == "float") {
float *d_arr = new float[amount]();
float lever;
for (int i = 0; i < amount; ++i) {
cin >> d_arr[i];
}
cin >> lever;
GtLever(d_arr, n, lever);
delete[] d_arr;
} else if (type == "char") {
char *d_arr = new char[amount]();
char lever;
for (int i = 0; i < amount; ++i) {
cin >> d_arr[i];
}
cin >> lever;
GtLever(d_arr, n, lever);
delete[] d_arr;
}
return 0;
}