如何将if语句转换为switch语句

时间:2014-03-02 06:40:16

标签: c++

我想知道如何将这个if if语句转换为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;
        }
    }
}

5 个答案:

答案 0 :(得分:2)

这不是编写程序的好方法。如果你需要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在插入项目时自动对其项目进行排序。

答案 1 :(得分:1)

为什么不将输入存储在数组中并尝试使用任何排序算法对输入进行排序,而不是这种方法?

答案 2 :(得分:0)

您的具体案例中的答案是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 :(得分:0)

如果挑战是你不能对数字进行排序,并且限制是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。

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

答案 4 :(得分:0)

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

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个条件交换。