Тема: qsort
Наскільки я розумію, функція qsort повинна міняти місцями елементи, якщо cmp повертає додатне значення. cmp("4", "2") повертає -2, тому qsort не повинна міняти їх. Але якщо ввести
3
4
01
2,
то отримаємо 2014.
#include <iostream>
using namespace std;
int cmp(const void* str1, const void* str2)
{
char* s1 = (char*)str1, *s2 = (char*)str2;
int l = min(strlen(s1), strlen(s2));
if (strncmp(s1, s2, l) || strlen(s1) == strlen(s2)) return -strncmp(s1, s2, l);
unsigned char i = l;
if (strlen(s1) > strlen(s2))
{
while (s1[i] == s1[l-1] && i < strlen(s1)) ++i;
return s1[l-1]-s1[i];
}
if (strlen(s1) < strlen(s2))
{
while (s2[i] == s2[l-1] && i < strlen(s2)) ++i;
return s2[l-1]-s2[i];
}
}
int main()
{
/*char s1[10], s2[10];
cin >> s1 >> s2;
cout << cmp(s1, s2);*/
short N;
char S[101];
cin >> N;
char** A = new char*[N];
for (char i = 0; i < N; ++i)
{
cin >> S;
A[i] = new char[strlen(S)];
strcpy(A[i], S);
}
qsort(A, N, 4, cmp);
for (char i = 0; i < N; ++i) cout << A[i];
cout << endl; system("pause");
return 0;
}