这是我在链表中搜索的代码,但它没有给我正确的结果。请帮帮我,我很担心。
search() {
char ser[20];
cout << "enter data to be searched" << endl;
gets(ser);
for ( start=head; start->ptr!=NULL; start=start->ptr ) {
if ( start->info == ser ) {
cout << "ok" << endl;
break;
}
}
cout << "not found" << endl;
}
谢谢, Saima Kanwal Bhutta
答案 0 :(得分:1)
您对此有何看法?
if ( start->info == ser ) {
正在检查start->info
是否指向ser
数组的开头。您可能希望使用strcmp
来比较字符串。
答案 1 :(得分:1)
赛马,
首先,欢迎来到论坛,并欢迎计算机编程的精彩,令人沮丧和富有成效的世界。
其次,我编辑了你的帖子。如果您现在单击edit
按钮,您将看到如何布置源代码,因此论坛可以很好地显示它。
第三,我猜你的意思是return
,你说break
...所以你不要总是看到“未找到”的消息。那是你想要的吗?
第四,我建议你从列表搜索部分中分离用户输入的部分...它很容易完成,它使链表列表搜索可以用任何字符串(从任何地方),而不仅仅是一个用户现在进入同样将搜索的输出分开,这样你可以在以后重新使用搜索,以产生适合环境的输出。
最后,那些变量名称(原谅我)很糟糕!
所以...我的ANSI-C版本看起来像这样:
int contains(char* target) {
for ( Node node=head; node->next!=NULL; node=node->next ) {
if ( strcmp(node->data, target)==0 ) {
return 0; // TRUE
}
}
return 1; // FALSE
}
以上是链接列表部分的“相当标准”名称,这有助于使您的代码更具可读性,因此可维护。 WTF也是一个“ser”......怎么样“目标”?
如果这完全是你的头脑,那么不要担心......暂时忽略这个建议。
干杯。基思。
答案 2 :(得分:0)
要比较2个字符串,请使用strcmp()。使用“==”将比较2个指针,而不是字符串的内容。
答案 3 :(得分:0)
在您的情况下,您应该比较字符串的内容而不是它们的起始地址。
正确版:
void search() {
char ser[20];
cout << "enter data to be searched" << endl;
gets(ser);
for (start=head; start->ptr!=NULL; start=start->ptr)
{
if (strcmp(start->info, ser) == 0)
{
cout << "found" << endl;
return;
}
}
cout << "not found" << endl;
}
更多提及
您需要在head
循环之前先检查for
。否则,如果head
为NULL,程序将崩溃。
答案 4 :(得分:0)
您的循环条件很危险。您没有检查'start'本身是否为NULL。此外,您将比较Next元素是否可用,从而在下一个元素不可用时丢失当前元素。字符串比较也不正确。按以下步骤更新循环:
for ( start=head; start != NULL; start=start->ptr ) {
if ( strcmp(start->info, ser) == 0 ) {
cout << "ok" << endl;
break;
}
}
答案 5 :(得分:0)
获取是危险的,因为它无法指定缓冲区的长度。有一些替代方法可以与char数组一起使用,但是在这里使用std :: string会更容易。我已经将查找功能提取到一个单独的函数中。这使您可以使用相同的功能搜索列表,无论您如何获得要搜索的值,或者您想要使用它做什么。
Node* find(Node* head, const string& needle) {
for (; head; head = head->ptr) {
if (head->info == needle) {
return head;
}
}
return 0;
}
void search(Node* head) {
string needle;
cout << "Data to be searched: ";
if (!getline(cin, needle)) {
// Do something appropriate, such as throw an exception, return
// an error code (if you change the function's interface), or
// simply exit.
abort();
}
Node* found = find(head, needle);
if (found) {
cout << "Found.\n";
}
else {
cout << "Not found.\n";
}
}