如何将 const 字符串引用与字符串指针进行比较?

Posted

技术标签:

【中文标题】如何将 const 字符串引用与字符串指针进行比较?【英文标题】:How to compare a const string reference to a string pointer? 【发布时间】:2014-11-06 06:29:38 【问题描述】:

您好,这是我的第一篇文章 :)

我对 C++ 编程非常陌生,并不完全理解字符串引用和指针的实现。我花了一个多小时在网上搜索,以了解如何将这两个字符串中的一个转换为“可比较的”,但我发现的所有内容都与比较两个普通字符串或一个 const string& 和一个char*,或稍有不同的东西。 我已经阅读了字符串***以及我想尝试解决这个问题的所有内容,但我根本不知道发生了什么。

简而言之,我需要使用 '

我从“http://www.cplusplus.com/reference/string/string/operators/”理解它的方式 运算符的左侧和右侧都必须是 const string&

bool operator<  (const string& lhs, const string& rhs);
bool operator<  (const char*   lhs, const string& rhs);
bool operator<  (const string& lhs, const char*   rhs);

在我的代码中,我有一个已经是 const string& 的字符串值,以及一个是 string* 的字符串值。

问题是,当我尝试将 const string& 与 string* 进行比较时,出现错误。

我是新手,几乎不了解 const string& 是什么,以及为什么我不能将它与 string* 进行比较。

您能帮我找到一种方法来比较这两个字符串以进行 BST 插入吗?

这是我的 BST 课程

  class BST

    public:
        BST();
        ~BST();

        void insertContent(const string& word, const string& definition);
        void deleteContent(string* word);
        const string* getContent(const string& word);

    private:
        class Node
        
            public:
                Node(string* word, string* definition)
                left=NULL; right=NULL; m_word=word; m_definition=definition;

                Node* left;
                Node* right;
                string* m_word;
                string* m_definition;
        ;

这是我需要帮助比较字符串的插入函数

void BST::insertContent(const string& word, const string& definition)

    Node* ptr = root;
    //Node* entry = new Node(word, definition);

    if (root == NULL)
    
        root = new Node(word, definition);
        return;
    

    while (ptr != NULL)
    
        const string& curwor = ptr->m_word; /*I was thinking of making my own const string& out of ptr->m_word but it didn't work. */

        **if (word < ptr->m_word)**
        

        
    

【问题讨论】:

cplusplus.com/reference/string/string/compare 'const' 代表常数。如果您声明为“const”,则无法修改。如果你可以改变它的值,那一定是一个变量。 取消引用指针:if (word &lt; *(ptr-&gt;m_word))。你可以用五行代码问这个问题。 您可以使用 '==' 或 '!=' 比较两个字符串是否相等。您最好不要使用其他运算符,而是使用“比较”方法。 字符串只是 char[] 的抽象。其实c++只是给了你一个string类型和方便的函数来操作它,但在幕后,它只是被当作一个char数组来处理。因此,您仍然可以像使用 char[] 一样使用指针来解析字符串。 【参考方案1】:

根据您的问题,示例代码如下:

std::string test1 = "test1";
std::string test2 = "test2";
const std::string &test3 = test1;
std::string * point_str = &test2;
if (test3 > (*point_str))

    std::cout << "The test1 is bigger" << std::endl;

else

std::cout << "The test2 is bigger" << std::endl;

字符串 * 点应该用作 (*point)。看看两本不错的 C++ 书籍:有效的 C++ 和更有效的 C++。

【讨论】:

以上是关于如何将 const 字符串引用与字符串指针进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

让你彻底弄懂指针引用与const

C++ Primer Plus基础知识部分快速通关

如何通过引用传递子字符串?

将const引用/指针传递给类进行存储的首选方法,而不是复制引用的对象

如何将双引号字符串与字符进行比较?

10. 第 10 章 指针