C++ string.compare()

Posted

技术标签:

【中文标题】C++ string.compare()【英文标题】: 【发布时间】:2009-07-01 19:26:30 【问题描述】:

我正在为一个作业构建一个比较器,我正在拔头发,因为这看起来很简单,但我想不通。

这个功能给我带来了麻烦:

int compare(Word *a, Word *b)

    string *aTerm = a->getString();
    string *bTerm = b->getString();

    return aTerm->compare(bTerm);

Word::getString 返回一个字符串*

错误:

 In member function `virtual int CompWordByAlpha::compare(Word*, Word*)':   
  no matching function for call to...

...后面是一堆函数定义。

有什么帮助吗?

【问题讨论】:

我认为您忽略了错误消息中最重要的部分。 下次贴出整个错误信息! 你打赌。我认为这并不重要,因为字符串是 C++ 标准库的一部分,而且我知道这不是我的类及其函数的问题。 【参考方案1】:

您将字符串与字符串指针进行比较,这是无效的。你想要的

   return aTerm->compare(*bTerm);

【讨论】:

做到了。我不明白为什么需要星号,因为 bTerm 已经是 *string。这是否意味着 basic_string::compare 方法需要一个 **basic_string 参数? string::compare() 将字符串引用作为参数,而不是指针。传递 *bTerm 会取消引用指针,以便您传递字符串对象,而不是字符串指针。 哦,这很有道理。谢谢弗雷德!【参考方案2】:

您没有得到 * 运算符的不同用途。在“string* bTerm = b->getString()”中使用 * 表示“bTerm 是指向字符串的指针”。在 compare(*bTerm) 中使用 * 表示“获取 bTerm 指向的位置的值”,而不是仅仅使用 compare(bTerm),它只是尝试比较 bTerm 本身的值,这是一个十六进制地址。

这也发生在该调用的左侧:

aTerm->compare(*bTerm); //this statement
(*aTerm).compare(*bTerm); //is the same as this statement

-> 运算符只是减少了所需的输入量。

P.S.:这种东西你可以很容易地从谷歌或你的编程教科书中找到。尽管其他人可能不同意,但我认为关于完全基本语法的问题在 Stack Overflow 上没有任何位置。

【讨论】:

我是先学 Java 的,刚开始接触 C++,所以我还是习惯了有意识地管理指针和引用。我发现 Fred 的回答对编译我的程序非常有帮助,而且我发现你的回答非常有用。现在,我如何打印输出? ;) 你用 std::cout 打印输出。

以上是关于C++ string.compare()的主要内容,如果未能解决你的问题,请参考以下文章

844. Backspace String Compare

LeetCode 844. Backspace String Compare

java string.compare实现

C#中String的静态方法Compare(str1,str2)比较字符串大小

C# CompareTo 和 String.Compare

844. Backspace String Compare