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()的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 844. Backspace String Compare