我的代码在visual studio中完美运行但我遇到了在eclipse中运行它的问题。 在功能中:
City* Gps::FindCity(const char* city)
{
if(city != NULL)
{
City *tmp = NULL;
if (! m_gpsCities.empty())
{
for (list<City*>::iterator iter = m_gpsCities.begin(); iter != m_gpsCities.end(); iter++)
{
tmp = (City*)(*iter);
if(Vehicle::StringCompare(tmp->GetCityName(),city)==0)
return tmp;
}
}
}
return NULL;
}
问题是,在第一次迭代之后,当列表有超过1个元素时,它会退出循环,并且不会覆盖列表中的其他元素。
stringcompare:
int Vehicle::StringCompare(const char* str1, const char* str2)//assuming all not null
{
string s1, s2;
char *st1 = OrgName(str1),*st2 = OrgName(str2);
s1.assign(st1);
s2.assign(st2);
int size1 = s1.size(), size2 = s2.size(), min = 0, index =0;
if(str1[size1 - 1] == '\r' || str1[size1 - 1] == '\0' || str1[size1 - 1] == '\n')
size1--;
if(str2[size2 - 1] == '\r' || str2[size2 - 1] == '\0' || str2[size2 - 1] == '\n')
size2--;
if(size1>size2)
min=size2;
else
min=size1;
bool bigger1 = true;
for(index=0;index<min;index++)
{
if(st1[index]>st2[index])
return 1;
if(st1[index]<st2[index])
return (-1);
}
delete[] st1;
delete[] st2;
if(size1==size2)
return 0;
if(min==size1)
return (-1);
else
return 1;
}
答案 0 :(得分:0)
您只想为您的特定谓词实现find_if
,这确实是具有较少特定整数输出的strcmp
的变体。试试这个:
City* Gps::FindCity(const char* MyCityName)
{
if((MyCityName!= NULL)&&(!m_gpsCities.empty())
{
for (list<City*>::const_iterator iter=m_gpsCities.begin(); iter!=m_gpsCities.end(); ++iter)
{
const char* MyCityTempNameChar = iter->GetCityName();
const char * st1 = OrgName(MyCityName),
const char * st2 = OrgName(MyCityTempName);
const int predicate = strcmp(st1, st2);
if(predicate==0)
{
return (*iter);
}
}
}
return NULL;
}
或根据以下内容调整谓词:
int Vehicle::StringCompare(const char* str1, const char* str2)
{
const char * st1 = OrgName(str1),
const char * st2 = OrgName(str2);
const int predicate = strcmp(st1, st2);
return predicate;
}