试图从最小值到最大值对C++的3个值进行排序

trying to order 3 values from least to greatest C++

本文关键字:3个 排序 C++ 最小值 最大值      更新时间:2023-10-16

我有一个程序,它接受一个人输入的数字并求和。这种情况发生了3次,所以我总共有3次。我遇到的问题是,无论总和是多少,我都需要从大到小排序

#include <iostream>
#include <string> 

using namespace std; 
string firstName1, lastName1;   // input and output for the users names
    string firstName2, lastName2;
    string firstName3, lastName3;
// from greatest to least
if ( sum > sum_2 > sum_3 )
    {
        cout << "Total for" << " " << firstName1 << " " << lastName1 << " " << "$" << sum << ".00" << endl;
        cout << "Total for" << " " << firstName2 << " " << lastName2 << " " << "$" << sum_2 << ".00" << endl;
        cout << "Total for" << " " << firstName3 << " " << lastName3 << " " << "$" << sum_3 << ".00" << endl;
}

在c++中,语法sum > sum_2 > sum_3不会像您所假设的那样求值。它相当于(sum > sum_2) > sum_3

sum大于sum_2的情况下,sum > sum_2将评估为true。然后,该布尔值将被转换为整数1,并与sum_3进行比较。

要做你试图完成的事情,请尝试:

if (sum > sum_2 && sum_2 > sum_3)

使用助手交换函数:

void swap( int *a, int *b )
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

泡沫分类:

int sums[3] = { sum, sum_2, sum_3 };
for ( int i = 0; i < 3; ++i )
    for ( int j = 0; j < i; ++j )
        if ( sums[j] < sums[i] ) 
            swap( &sums[j], &sums[i] );
cout << "Total for" << " " << firstName1 << " " << lastName1 << " " << "$" << sums[0] << ".00" << endl;
cout << "Total for" << " " << firstName2 << " " << lastName2 << " " << "$" << sums[1] << ".00" << endl;
cout << "Total for" << " " << firstName3 << " " << lastName3 << " " << "$" << sums[2] << ".00" << endl;