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

时间:2014-09-12 06:33:40

标签: c++ string pointers reference compare

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

我是C ++编程的新手,并不完全理解字符串引用和指针的实现。我花了一个多小时搜索网络,找出我如何将这两个字符串中的一个转换为“可比较”,但我发现的所有内容都与仅仅比较2个普通字符串,或者是一个常量字符串&和char *,或略有不同的东西。 我已经读过字符串wikipedias以及我想到的所有想法,但我只是不知道发生了什么。

简而言之,我需要使用'<'来比较字符串运营商。例如:“if(foo< bar)std :: cout<<”foo小于bar \ n“;”

我从“http://www.cplusplus.com/reference/string/string/operators/”中理解它的方式 操作符的左侧和rhs都必须是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字符串&amp;和一个字符串值,它是一个字符串*。

问题是,当我尝试比较一个const字符串&amp;到一个字符串*,我收到一个错误。

我是新手,几乎不了解const字符串&amp;是,为什么我不能将它与字符串*进行比较。

你能否帮我找到一种方法来比较这两个字符串以便我的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)**
        {

        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

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 ++。