大家好! 我有一些关于字符串和字符数组的问题。我正在编写一个关于基于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;
}
我不确定,但我这个问题来自于咆哮的字符串,但我不知道为什么?是他们在内存中分配不同的空间,实际上是不同的对象?使用字符数组而不是字符串是否好?
答案 0 :(得分:1)
我猜这个问题可能是x == p->data[i].key.getName()
。我需要了解更多有关您的计划的信息。
我强烈建议您熟悉编译器的调试器并逐步完成代码,而不是Play 20 Questions。学习调试器的任何时间都是明智的投资,恕我直言......
以下示例说明了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=%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;
}
'希望有所帮助!