Проблема гораздо раньше, чем «ЗДЕСЬ».
Эта часть
if(s1.compare(s2)<0)
{
if(s2.compare(s3)<0)
{
cout << s1 << ", " << s2 << ", " << s3 << endl;
}
else
cout << s1 << ", " << s3 << ", " << s2 << endl;
}
впервые проверяет, что s1
«меньше» s2
. Таким образом, у вас есть частичный заказ s1
, s2
.
Но тогда вам нужно выяснить, в каком из трех возможных мест s3
должен go: впереди s1
, за s2
, возможно, между ними. Однако внутреннее условное выражение допускает только два разных выхода ...
Добавлено:
Вы можете решить проблему, начав с комментария выше: Сравнение двух элементов достаточно, чтобы отсортировать их. Затем вам нужно сравнить третий с обоими из них, чтобы решить, должен ли он go первый, второй или последний:
if(s1.compare(s2) <= 0) // s1 goes before s2
{
if(s3.compare(s1) <= 0) // s3 goes before s1
cout << s3 << ", " << s1 << ", " << s2 << endl;
else if(s3.compare(s2) <= 0) // s3 goes before s2 but after s1
cout << s1 << ", " << s3 << ", " << s2 << endl;
else // s3 goes after s2
cout << s1 << ", " << s2 << ", " << s3 << endl;
}
else // s2 goes before s1
{
if(s3.compare(s2) <= 0) // s3 goes before s2
cout << s3 << ", " << s2 << ", " << s1 << endl;
else if(s3.compare(s1) <= 0) // s3 goes before s1 but after s2
cout << s2 << ", " << s3 << ", " << s1 << endl;
else // s3 goes after s1
cout << s2 << ", " << s1 << ", " << s3 << endl;
}
Возможны 6 перестановок для 3 входных значений, и все они доступный. На каждом пути проводится не более 3 сравнений, что достаточно для различения guish каждого из 6 возможных выходов.