问题描述
我正在尝试用C ++编写一个缩小的FizzBuzz程序,因为我现在正在学习它。我想知道是否有一种简短的方式说“如果存在此字符串,请返回此字符串,否则请返回下一部分”。
在JavaScript中,使用||
运算符可以按照我的想法进行操作:
function fizzbuzz() {
const maxnum = 20; // Simplified down to 20 just for example
for (let i = 1; i <= maxnum; i++) {
let output = "";
if (i % 3 == 0) output += "Fizz";
if (i % 5 == 0) output += "Buzz";
console.log(output || i); // If the output has something,print it,otherwise print the number
}
}
fizzbuzz();
当我在C ++中尝试此操作时,
#include <iostream>
#include <string>
using namespace std;
int main() {
int maxnum = 100;
string output;
for (int i = 1; i <= maxnum; i++) {
output = "";
if (i % 3 == 0) output += "Fizz";
if (i % 5 == 0) output += "Buzz";
cout << output || i << endl; // I've also tried the "or" operator instead of "||"
}
return 0;
}
我收到此错误:
main.cpp:12:32: error: reference to overloaded function Could not be resolved; did you mean to call it?
cout << output || i << endl;
^~~~
我知道您可以在cout
之前说一下(并更改提示行):
if (output == "") output += to_string(i);
但是我的问题是,像JavaScript中一样,是否可以用C ++来实现此目的?还是我必须要有类似于上面的if
语句的东西?
解决方法
在C ++中,您只能使用三元运算符。
三元运算符的工作方式(非常类似于JavaScript中的三元):
condition ? "truthy-return" : "falsey-return"
^ A boolean ^ what to return ^ what to return
condition if the condition if the condition
is truthy is falsey
该三元示例与此等效(假定位于返回字符串的函数中):
if (condition) {
return "truthy-return";
} else {
return "falsey-return";
}
C ++确实有其独特之处,因为它是一种静态类型的语言:
-
值
-
""
不被认为是错误的,是布尔值。如果长度为0,则通过stringName.length()
查找字符串的长度将返回0。 -
:
两侧的返回类型必须相同,因此必须使用i
将std::to_string(i)
转换为字符串 - 最后,此三元运算符必须在其自己的括号内,例如:
(output.length() ? output : to_string(i))
std::string
(空字符串)的代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
int maxNum = 100;
string output;
for (int i = 1; i <= maxNum; i++) {
output = "";
if (i % 3 == 0) output += "Fizz";
if (i % 5 == 0) output += "Buzz";
cout << (output.length() ? output : to_string(i)) << endl;
}
return 0;
}