如果一个变量在C ++中为空,是否有一种简便的方法来打印另一个变量?

问题描述

我正在尝试用C ++编写一个缩小的FizzBu​​zz程序,因为我现在正在学习它。我想知道是否有一种简短的方式说“如果存在此字符串,请返回此字符串,否则请返回下一部分”。

在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 ++确实有其独特之处,因为它是一种静态类型的语言:

    std::string(空字符串)的
  1. ""不被认为是错误的,是布尔值。如果长度为0,则通过stringName.length()查找字符串的长度将返回0。
  2. :两侧的返回类型必须相同,因此必须使用istd::to_string(i)转换为字符串
  3. 最后,此三元运算符必须在其自己的括号内,例如:(output.length() ? output : to_string(i))

代码:

#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;
}