2014-09-12 2 views
0

Привет, это мой 1-й пост :)Как сравнить ссылку строки const со строковым указателем?

Я очень новичок в программировании на С ++ и не совсем понимаю реализации ссылок на строки и указателей. Я потратил более часа на поиски сети, чтобы узнать, как я конвертирую одну из этих двух строк, чтобы быть «сопоставимой», но все, что я нашел, было связано либо с сравнением двух нормальных строк, либо с константной строкой & и char *, или что-то немного другое. Я читал строки wikipedias и все, что я думал, чтобы попытаться понять это, но я просто не знаю, что происходит.

Короче говоря, мне нужно сравнить строки, используя оператор '<'. Пример: «если (Foo < бар) станд :: соиЬ < <„Foo меньше, чем бар \ п“;»

Я так понимаю, это от «http://www.cplusplus.com/reference/string/string/operators/» как в левой стороне и правой части оператора должны быть константной

снабжать струной, тетивой и т.п. &
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 & с строкой *, я получаю сообщение об ошибке.

Я новичок в этом и едва понимаю, что такое const 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)** 
     { 

     } 
    } 
} 
+0

http://www.cplusplus.com/reference/string/string/compare/ – Nahum

+1

«const» означает константу. Если вы объявили как «const», его нельзя изменить. Если вы можете изменить его значение, это должна быть переменная. –

+0

Выделить указатель: 'if (word < *(ptr-> m_word))'. Вы можете задать этот вопрос в пяти строках кода. – juanchopanza

ответ

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

Смежные вопросы