字符数组而不是字符串

array of chars instead of string

本文关键字:字符串 数组 字符      更新时间:2023-10-16

大家好!我对字符串和字符数组有一些问题。我正在写一个关于基于B-树的数据库的项目,其中键是一些类,类似于这样:

  string name;
  double mark;
  int phone_number;

所以,我实现了插入功能,但在搜索功能上我有一些问题,这里是搜索功能:

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;
 }

和下一个索引:

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. 我猜问题可能是x == p->data[i].key.getName()。我需要更多地了解你的项目才能确定。

  2. 与其玩20个问题,我强烈建议您熟悉编译器的调试器并逐步完成代码。花在学习调试器上的任何时间都是明智的投资,IMHO。。。

  3. 下面是一个示例,说明std::string.compare():

样本输出:

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=%sn", p->getName());
  else
    printf ("p: NOT FOUNDn");
}
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;
}

"希望能有所帮助!