【问题标题】:How to figure out if the first index in an array is a negative sign如何确定数组中的第一个索引是否为负号
【发布时间】:2011-09-21 07:44:44
【问题描述】:

我正在尝试编写一个 bool 函数,它查看包含正数或负数的数组中的第一个索引,并分类它是否为负号(即 - )。如果它是负号,则返回 false,其他一切都返回 true。我试图弄清楚如何比较负号。以下代码给出了一个错误,因为'-'

    bool BigNum::get_positive() const
{
char '-';
if(digits[0] == '-')
{
    return false;
}
else
{
    return true;
}
}

【问题讨论】:

  • 你希望通过这个实现什么:char '-';?
  • 有一些现有的大整数库[我假设这就是你想要做的],为什么要重新发明轮子?
  • 另外,这更像是一个风格问题,但既然你的函数试图确定 BigNum 的实例是否代表一个正数,为什么不叫它isPositive()?一个名为 get_X() 的函数通常表明它正在返回一些存储的信息,但这里不是这种情况。
  • 另一个样式问题是if (condition) return true; else return false;,逻辑上应该是return !condition;(没有if)。

标签: c++ boolean negative-number


【解决方案1】:
char '-';

编译器认为您正在尝试声明一个字符,但这不是一个有效的声明。

您的整个函数可以替换为:

return (digits[0] != '-');

当然,这是假设[0]digits 的有效索引。否则,就会发生不好的事情。如果你知道数组的长度,你可以做这样的检查:

if( digits_length < 1 )
  return false;
return (digits[0] != '-');

【讨论】:

  • 这样写return digits_length &gt; 0 &amp;&amp; digits[0] != '-'不是更好吗? (假设您在这种情况下想要一个结果:我怀疑抛出异常甚至中止会更合适。)
  • @James:好吧,如果字符串长度为 0,那么它不会以 - 开头,但它也不代表数字。所以它有点取决于函数的用途。
  • @Steve 是的。就像这里经常发生的那样,我们被问到一个函数的最佳实现,而没有被告知它应该做什么。由于有人谈论“否定”(仅对数字有意义),我认为这是一个先决条件,但原始海报确实没有具体说明。返回值(任意bool,或enum)、抛出异常或中止都是有效的响应,具体取决于函数的具体规范。
  • @James:同意。如果您说输入是数字的有效表示是前提条件,那么即使 UB 也可能是合理的。我想我可以概括一下,可以完全指定此功能的人会知道如何编写它(我的意思是一个有效的版本,不一定就最易读的版本达成一致)。对 C 语法知识完全零了解的专业程序员可能是个例外,但专家会读一点而不是问这类问题。
【解决方案2】:

您必须删除或注释“char '-';”

【讨论】:

    【解决方案3】:

    错误在于行字符'-'。 '-' 应该存储在某个变量中,以后可以在 if 子句中使用该变量进行比较。这是一个语法错误,因为您没有为“-”定义存储。

    否则如上所述,只需删除此行并在 if 中使用“-”(正如您已经完成的那样)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 2015-11-11
      • 2015-10-27
      • 2020-02-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多