字符数组而不是字符串

时间:2016-01-14 00:53:35

标签: c++

大家好! 我有一些关于字符串和字符数组的问题。我正在编写一个关于基于B树的数据库项目,其中键是一些类,如下所示:

  string name;
  double mark;
  int phone_number;

所以,我实现了insert函数,但是在搜索函数中我遇到了一些问题,这里是搜索函数:

node* btree::search(string x)
{
    node* p = root;
    int i, j;
    j = 0;
    while( p )
    {
        cout << "for iter: " << j << p->noofkeys << endl;
        for( i = 0; i < p->noofkeys; i++ )
            if(x == p->data[i].key.getName() )
                return(p);

        p = p->nextindex(x);
    }
    return NULL;
 }

和nextindex:

node* node::nextindex(string x)
{
    int i;
    if( x < data[0].key.getName())
       return first;

    for( i=0; i < noofkeys; i++ ) {
      if( x < data[i].key.getName() || x == data[i].key.getName() )
        return data[i-1].next;
    }
    return data[i-1].next;
}

我不确定,但我这个问题来自于咆哮的字符串,但我不知道为什么?是他们在内存中分配不同的空间,实际上是不同的对象?使用字符数组而不是字符串是否好?

1 个答案:

答案 0 :(得分:1)

  1. 我猜这个问题可能是x == p->data[i].key.getName()。我需要了解更多有关您的计划的信息。

  2. 我强烈建议您熟悉编译器的调试器并逐步完成代码,而不是Play 20 Questions。学习调试器的任何时间都是明智的投资,恕我直言......

  3. 以下示例说明了std::string.compare()

  4. 示例输出:

    p=abc
    p: NOT FOUND
    

    示例代码:

    #include <stdio.h>
    #include <string.h>
    #include <string>
    
    class node {
      char m_name[80];
    public:
      node(char *name);
      char * getName ();
      node * search(std::string x);
    };
    
    node::node(char * name) {
      strcpy (m_name, name);
    }
    
    char *
    node::getName() {
      return m_name;
    }
    
    node *
    node::search(std::string x) {
      if (x.compare(getName()) == 0)
        return this;
      else
        return NULL;
    }
    
    void print_result(node *p) {
      if (p)
        printf ("p=%s\n", p->getName());
      else
        printf ("p: NOT FOUND\n");
    }
    
    int
    main (int argc, char *argv[]) {
      // Create a node object
      node my_node("abc");
    
      // Search: should match
      node * p = my_node.search("abc");
      print_result(p);
    
      // Search again: should *not* match
      p = my_node.search("123");
      print_result(p);
    
      return 0;
    }
    

    '希望有所帮助!