这是什么代码?为什么它有效?C++
What is this code? And why is it working? C++
除了最后一行,我几乎知道这段代码中的所有内容。库特之后他在做什么?它叫什么?我针对同一问题的代码几乎是三倍大。看到这里,我真的很震惊。我是 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;
}
原始代码可以通过分解它来使其更容易理解。首先包括:
#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
(测试表达式X
的计算结果是否为真实值,如果是,则计算并返回表达式Y
。否则,将计算并返回表达式Z
。
这与没有返回值的常规if
不同,但在其他方面的工作方式相同。
从可读性的角度来看,您希望将三元运算符的使用保持在最低限度,它们可能会变得非常混乱。使用嵌套三元确实没有必要。
这称为三元运算符。
>?:
是一个三元条件运算符:
条件运算符表达式的形式为
E1 ? E2 : E3
计算条件运算符的第一个操作数,并在上下文中转换为
bool
。在完成第一个操作数的值计算和所有副作用后,如果结果true
,则计算第二个操作数。如果结果false
,则计算第三个操作数。
因此,在您的示例中,此语句:
cout<<((i<=9)?c[i]:((i%2==0)?"even":"odd"))<<endl;
使用了 2 个嵌套?:
运算符:
在第一个中:
E1
是(i<=9)
E2
是c[i]
E3
是((i%2==0)?"even":"odd")
在第二个中,从上面的
E3
:E1
是(i%2==0)
E2
是"even"
E3
是"odd"
该语句等效于:
std::string temp; // because c[i] is a std::string...
if (i <= 9) {
temp = c[i];
} else {
if ((i % 2) == 0) {
temp = "even";
} else {
temp = "odd";
}
}
cout << temp << endl;
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 递归函数有效,但无法记忆
- 在C++中初始化向量映射的最有效方法
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 如何有效地在 std::vector 中插入一对?
- C++模板 t 不是有效的模板类型
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 将此布尔值传递给此函数的最有效方法是什么?