c++编写一个函数模板,实现10个数据的输入,返回10个数中值最大的。并对int,float,char 数据类型进行验证
时间: 2024-09-19 21:11:36 浏览: 52
opencv 中值滤波器 C++实现 源代码 完全
在C++中,你可以创建一个函数模板来处理这个问题。首先,你需要定义一个通用的函数模板,然后提供一个特殊化版本来适应int、float和char三种基本数据类型。下面是一个简单的示例:
```cpp
#include <iostream>
#include <cctype>
// 函数模板声明,用于接收任意类型的数据并找出最大值
template<typename T>
T findMax(T arr[], int size) {
if (size == 0)
return arr[0]; // 如果数组为空,直接返回第一个元素
T max = arr[0];
for(int i = 1; i < size; i++) {
if(arr[i] > max) {
max = arr[i];
}
}
return max;
}
// 特殊化函数模板,针对整型
int findMaxInt(int arr[], int size) {
return findMax<int>(arr, size);
}
// 特殊化函数模板,针对浮点型
float findMaxFloat(float arr[], int size) {
return findMax<float>(arr, size);
}
// 特殊化函数模板,针对字符型,注意这里需要先转换成数值比较
char findMaxChar(char arr[], int size) {
char* end;
for(int i = 1; i < size; i++) {
// 使用std::isdigit()判断是否是数字字符
if(std::isdigit(arr[i]) && std::isdigit(arr[0])) {
int num1 = static_cast<int>(arr[0]);
int num2 = static_cast<int>(arr[i]);
if(num2 > num1) {
arr[0] = arr[i]; // 更新最大值
}
}
}
return arr[0];
}
int main() {
int intArr[] = {5, 10, 15, 20};
float floatArr[] = {1.5f, 2.5f, 3.5f, 4.5f};
char charArr[] = {'a', 'b', 'c', 'd', '1', '9'}; // 注意:字符数组里有非数字字符,这将影响maxChar的计算结果
std::cout << "Max int: " << findMaxInt(intArr, sizeof(intArr)/sizeof(int)) << std::endl;
std::cout << "Max float: " << findMaxFloat(floatArr, sizeof(floatArr)/sizeof(float)) << std::endl;
std::cout << "Max char interpreted as number: " << findMaxChar(charArr, sizeof(charArr)/sizeof(char)) << std::endl;
return 0;
}
```
阅读全文