首页 > 解决方案 > 这段代码是什么?为什么它有效?C++

问题描述

除了最后一行,我几乎知道这段代码中的所有内容。cout之后他在做什么?它叫什么?我针对同一问题的代码几乎是原来的三倍。而且我看到这个后真的很震惊。我是 C++ 新手,这是我第一次看到这样的东西。我什至不知道你可以像他在他的代码中那样使用括号。如果您回答菜鸟友好,那就太好了。谢谢

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    string c[]={"","one","two","three","four","five","six","seven","eight","nine"};
    cin>>a>>b;
    for(int i=a;i<=b;i++)
        cout<<((i<=9)?c[i]:((i%2==0)?"even":"odd"))<<endl;
}



现在我的代码

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    // Complete the code.
    int a;
int b;
cin >> a >> b;

for ( int n = a; n <= b; n++) {
     if ( n >= 1 && n <= 9 ) {

    string num;

    switch(n) {
    case 1: 
    num = "one";
    break;
    case 2: 
    num = "two";
    break;
    case 3: 
    num = "three";
    break;
    case 4: 
    num = "four";
    break;
    case 5: 
    num = "five";
    break;
    case 6: 
    num = "six";
    break;
    case 7: 
    num = "seven";
    break;
    case 8: 
    num = "eight";
    break;
    case 9: 
    num = "nine";
    break;
}
  cout << num << "\n" ;


    } else if (n > 9 && n % 2 == 0) {
    cout << "even \n" ; 
    } else {
    cout <<  "odd \n" ; }

}

    return 0;
}



标签: c++

解决方案


通过分解原始代码可以使其更易于理解。首先包括:

#include <string>
#include <iostream>

然后定义数字常量:

const std::string number[] ={"zero","one","two","three","four","five","six","seven","eight","nine"};

然后定义一个函数来完成那个丑陋的嵌套三元组所做的事情:

std::string nameOf(int v) {
  if (v < 10) {
    return number[v];
  }

  if (v % 2 == 0) {
    return "even";
  }

  return "odd";
}

那么最终的代码其实很简单:

int main()
{
  int a,b;
  std::cin >> a >> b;

  for(int i=a; i<=b; ++i) {
    std::cout << nameOf(i) << std::endl;
  }

  return 0;
}

三元 ( X ? Y : Z) 测试 expressionX的计算结果是否为真值,如果是,则计算并返回 expression Y。如果不是,Z则计算并返回表达式。

if这与没有返回值的常规不同,但在其他方面工作方式相同。

从可读性的角度来看,您希望将三元运算符的使用降至最低,它们会变得非常混乱。真的不需要使用嵌套的三元组。


推荐阅读