Dzień dobre drogie programisty! Nie działa mi specjalizacja szablonu mającego wybrać najdłuższy łańcuch typu char*:
#include<iostream>
#include<cstring>
template <typename T>
T maxn(T arr[], int size);
template <>
const char * maxn(const char * arr[], int size);
int main(void)
{
using namespace std;
char str1[] = "Hello";
char str2[] = "Hi";
char str3[] = "Hey";
char str4[] = "Greetings!"; // 10 characters
char str5[] = "Goodbye!!!"; // 10 characters
char * arrs[5] =
{
str1,
str2,
str3,
str4,
str5
};
int arri[5] = {1, 2, 3, 100, -100};
// use specialization
cout << "The largest string is "
<< maxn(arrs, 5) << endl;
// use template
cout << "The largest number is "
<< maxn(arri, 5) << endl;
return 0;
}
template <typename T>
T maxn(T arr[], int size)
{
T max = arr[0];
for(int i = 1; i < size; i++)
{
if (arr[i] > max)
max = arr[i];
}
return max;
}
template <> //O TUTAJ!!!!!!!!!!!!!!!!!!!!!!!!!!!
const char * maxn(const char * arr[], int size)
{
const char * longest = arr[0];
for (int i = 1; i < size; ++i)
{
if (strlen(arr[i]) > strlen(longest))
longest = arr[i];
}
return longest;
}
Za każdym razem program wyświetla napis "Hello!" zamiast żądanego najdłuższego łańcucha :/.
Dla porównania, poniższy kod działa już bez problemixu:
#include<iostream>
#include<cstring>
using namespace std;
char * funkcja(char * arr[], int size);
int main()
{
char str1[] = "Hello";
char str2[] = "Hi";
char str3[] = "Hey";
char str4[] = "Greetings!"; // 10 characters
char str5[] = "Goodbye!!!"; // 10 characters
char * arrs[5] =
{
str1,
str2,
str3,
str4,
str5
};
cout<<funkcja(arrs, 5);
return 0;
}
char * funkcja(char * arr[], int size)
{
char * najwieksza=arr[0];
for (int i=1; i<size; ++i)
{
if(strlen(arr[i])>strlen(najwieksza))
najwieksza=arr[i];
}
return najwieksza;
}
No i o co cho?