Visual studio visual studio和linux(eclipse)中的不同结果
我的代码在VisualStudio中工作得很好,但在eclipse中运行它时遇到了问题。 在函数中:Visual studio visual studio和linux(eclipse)中的不同结果,visual-studio,eclipse,c++,Visual Studio,Eclipse,C++,我的代码在VisualStudio中工作得很好,但在eclipse中运行它时遇到了问题。 在函数中: City* Gps::FindCity(const char* city) { if(city != NULL) { City *tmp = NULL; if (! m_gpsCities.empty()) { for (list<City*>::iterator iter = m_gpsCiti
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;
}
City*Gps::FindCity(const char*City)
{
如果(城市!=NULL)
{
城市*tmp=NULL;
如果(!m_gpsCities.empty())
{
对于(列表::迭代器iter=m_gpsCities.begin();iter!=m_gpsCities.end();iter++)
{
tmp=(城市*)(*iter);
如果(车辆::StringCompare(tmp->GetCityName(),城市)==0)
返回tmp;
}
}
}
返回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;
}
int-Vehicle::StringCompare(const-char*str1,const-char*str2)//假设所有值都不为空
{
字符串s1、s2;
char*st1=OrgName(str1),*st2=OrgName(str2);
s1.转让(st1);
s2.分配(st2);
int size1=s1.size(),size2=s2.size(),min=0,index=0;
如果(str1[size1-1]='\r'| | str1[size1-1]='\0'| | str1[size1-1]='\n')
尺寸1-;
如果(str2[size2-1]='\r'| | str2[size2-1]='\0'| | str2[size2-1]='\n')
尺寸2-;
如果(尺寸1>尺寸2)
最小=尺寸2;
其他的
最小=尺寸1;
bool-bigger1=真;
对于(索引=0;索引t2[index])
返回1;
if(st1[index]您只想为您的特定谓词实现,它实际上是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;
}
可能Vehicle::StringCompare(tmp->GetCityName(),city)==0
返回true?为什么StringCompare
是Vehicle
的一个成员函数?它没有返回true,因为当我调试时,我看到它在第一次迭代后返回到循环行。这是家庭工作任务的一部分,我选择将函数放在Vehicle中,因为它是我现在意识到的最基本的目标,我没有正确解释调试器在屏幕上显示的内容,它实际上是一个单元素列表。但我需要使用我的比较,我以某种方式进行比较。看起来你只是比较了两个城市的名称。我按照要求的特定方式进行比较
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;
}