gpt4 book ai didi

c++ - 严格不起作用

转载 作者:行者123 更新时间:2023-11-30 00:59:51 25 4
gpt4 key购买 nike

我在特定函数中使用 stricmp 时遇到问题,在其他函数中它工作得很好,除了这个。问题是即使它比较相同的字符串 (char*) 也不会返回 0。可能是什么问题?(抱歉弄得一团糟,我会尝试格式化它)那是代码:

Employee* CityCouncil::FindEmp(list<Employee*> *lst, char* id)  
{
bool continue1 = true;
Employee* tmp= NULL;
char* tmpId = NULL, *tmpId2 = NULL;
list<Employee*>::iterator iter = lst->begin();
if ((id == NULL) || (lst->empty()==true))
return NULL;
while ((iter != lst->end()) && (continue1)){
tmp = (Employee*)(*iter);
tmpId = (*tmp).GetId();
if(tmpId != NULL)
{
if(stricmp(tmpId,id) == 0)
continue1 = false;
}
if (continue1 == true)
iter++;
}
if (iter == lst->end())
return NULL;
return (Employee*)(*iter);
}

最佳答案

永远不要责怪属于 C 库的函数。 stricmp 肯定会按预期工作,这意味着字符串确实不同。此函数中的逻辑一定有问题 - 您应该使用 printf 语句找出字符串不同的位置和原因。

编辑:我整理了一个简单的测试程序。这对我有用:

#include <stdio.h>
#include <list>
using namespace std;

// Dummy
class Employee
{
public:
Employee(const char *n){ id = strdup(n); }
char *id;
char *GetId() { return this->id; }
};

Employee* FindEmp(list<Employee*> *lst, char* id)
{
bool continue1 = true;
Employee *tmp = NULL;
char* tmpId = NULL;

list<Employee*>::iterator iter = lst->begin();
if(id == NULL || lst->empty())
return NULL;

while(iter != lst->end() && continue1)
{
tmp = (Employee*)(*iter);
tmpId = (*tmp).GetId();
if(tmpId != NULL)
{
if(stricmp(tmpId,id) == 0)
continue1 = false;
}
if(continue1 == true)
iter++;
}

if(iter == lst->end())
return NULL;

return (Employee*)(*iter);
}


int main(int argc, char **argv)
{
list<Employee*> l;

l.push_back(new Employee("Dave"));
l.push_back(new Employee("Andy"));
l.push_back(new Employee("Snoopie"));

printf("%s found\n", FindEmp(&l, "dave")->GetId());
printf("%s found\n", FindEmp(&l, "andy")->GetId());
printf("%s found\n", FindEmp(&l, "SnoOpiE")->GetId());

return 0;
}

请注意,我使用了您提供的功能。同样,stricmp 没有任何问题,问题一定出在您的代码中。

关于c++ - 严格不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3691890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com