【问题标题】:C++: Lexicographic comparing strings using operatorsC ++:使用运算符的字典比较字符串
【发布时间】:2013-01-10 20:46:48
【问题描述】:

据我了解,如果我使用小于 (string smallest。

如你所见,我给它赋值z。字典价值最高的字母/符号是什么?是否有任何已经定义的静态变量我可以在 C++ 中分配它?这样做的标准是什么?

string VectorPQueue::extractMin() {
    string smallest = "z";
    int *count = new int;
    if (elems.size() != 0) {
        for (int i = 0; i < elems.size(); i++)
        {
            if ((elems.get(i)) < smallest) {
                smallest = elems.get(i);
                *count = i;
            }
        }

    } else {
        ErrorException("ERROR: pqueue is empty.");
        return "";
    }

    elems.remove(*count);
    printElements();
    return smallest;
}

【问题讨论】:

  • nb:特别是如果你有混合大小写,它会通过减法/数值来比较它们,这对人类来说不一定是“字典”(即不写/不写的人的集合)以维护软件为生)。
  • 作为一个仅供参考,您想抛出 ErrorException,而不仅仅是构造它。看起来你在这里使用的是斯坦福 CS106B 库(这似乎是为优先队列分配完成的),所以你可以只使用 error() 函数。
  • ...动态分配counter 完全没有意义。
  • @TomLilletveit 就我个人而言,我从未发现内存泄漏非常有趣。

标签: c++ string lexicographic


【解决方案1】:

您可能想要使用std::min_element 算法,该算法将使用正常的小于运算符来检索指向范围内最小元素的迭代器。这完全消除了您自己编写此函数的需要。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    只需将smallest 设置为第一个字符串,然后从第二个字符串开始搜索。

    【讨论】:

    • 我这样做了,它引入了一些错误 - 所以我只是想这样做。 (例如,如果我删除所有项目,然后它开始在位置 1 等处搜索) - 数组越界
    • 它没有引入一些错误;它暴露他们。 不过,min_element 总体上可能更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2013-08-23
    • 1970-01-01
    • 2016-10-22
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多