如何将 If else 语句转换为 switch 语句

how to turn if else statement to a switch statement

本文关键字:语句 转换 switch else If      更新时间:2023-10-16

我想知道如何将这个 if else 语句转换为 switch 语句。这是一个 C++ 程序,用于按正确的顺序放置整数。我想不出办法。请帮忙。提前谢谢你。

int x, y, z;
cout << "please enter three integers:";
cin >> x >> y >> z;
if (x <= y && y <= z)
    cout << x << " " << y << " " << z << endl;
else if (x <= z && z <= y)
    cout << x << " " << z << " " << y << endl;
else if (y <= z && z <= x)
    cout << y << " " << z << " " << x << endl;
else if (y <= x && x <= z)
    cout << y << " " << x << " " << z << endl;
else if (z <= x && x <= y)
    cout << z << " " << x << " " << y << endl;
else
    cout << z << " " << y << " " << x << endl;
if (x <= y) {
    if (z <= x) {
        cout << z << " " << x << " " << y << endl;
    } else {
        if (z <= y) {
            cout << x << " " << z << " " << y << endl;
        } else {
            cout << x << " " << y << " " << z << endl;
        }
    }
} else {
    if (z >= x) {
        cout << y << " " << x << " " << z << endl;
    } else {
        if (y >= z) {
            cout << z << " " << y << " " << x << endl;
        } else {
            cout << y << " " << z << " " << x << endl;
        }
    }
}

这不是编写程序的好方法。如果您需要 4 个整数怎么办?一种方法是使用像std::vector这样的列表并对其进行排序。

vector<int> numbers;
int number = 0;
while (numbers.size() < 3 && cin >> number)
    numbers.push_back(number);
sort(cbegin(numbers), cend(numbers)); // sorts ascending by default
for (auto number : numbers)
    cout << number << " ";
cout << endl;

您还可以使用 std::multiset 在插入项目时自动对其项目进行排序。

与其使用

这种方法,不如将输入存储在数组中并尝试任何排序算法来对输入进行排序?

在您的特定情况下,答案是 you can't
您的 if 语句具有特定条件,其中,
switch内不会真正工作.

if/else if/else语句的示例可以是
翻译成switch将是:

if(i == 1) {
    // code here
} else if(i == 2) {
    // code here
} else if(i == 3) {
    // code here
} else {
    // code here
}

这将转化为:

switch(i) {
    case 1:
        //code here
        break;
    case 2:
        //code here
        break;
    case 3:
        //code here
        break;
    default:
        //code here
        break;
}

希望这有助于更多地了解switch语句。

如果挑战在于您无法对数字进行排序,并且限制为 3 个整数,那么有更好的方法来完成您正在做的事情。

#include <iostream>
using namespace std;
int main()
{
   int combo[6][3] = {{0,1,2},{0,2,1},{1,0,2},{1,2,0},{2,0,1},{2,1,0}};
   int values[3];
   cin >> values[0] >> values[1] >> values[2];
   for (int i = 0; i < 6; ++i )
   {
      if ( values[combo[i][0]] <= values[combo[i][1]] && 
           values[combo[i][1]] <= values[combo[i][2]] )
      {
          cout << values[combo[i][0]] << " " << values[combo[i][1]] <<
                " " << values[combo[i][2]];
          break;
      } 
   }
}
组合

数组包含 3 个插槽可能发生的所有组合。 另请注意,输入是一个数组。 即使你没有使用循环,你需要的最大 if() 语句也是 6。

但是,您应该提前提及这是一个挑战,以及限制是什么。 否则,请查看有关存储和排序这些数字的其他答案。

您只需要三个条件交换即可对三个元素的列表进行排序:

int x, y, z;
cout << "please enter three integers:";
cin >> x >> y >> z;
if (y < x) swap(y, x);
if (z < y) swap(z, y);
if (y < x) swap(y, x);
cout << x << " " << y << " " << z << endl;

请注意,此方法无法缩放。对于 10 个数字,您已经需要 45 个条件交换。