Problem ze znajdowaniem najdłuższego łańcucha tablicy w specjalizacji szablonu

0

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?

0

Dziwna sprawa, u mnie na Code Blocksie nie działa. Jakieś czary chyba

1

U mnie działa (gcc, clang), a w sumie chyba nie powinno (do sprawdzenia). Problemem jest to, że podajesz char**, co jest różne od const char**, dla którego jest specjalizacja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1