visual studio和linux(eclipse)的不同结果

时间:2010-09-26 17:47:59

标签: visual-studio eclipse c++

我的代码在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;  
}

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; 
 }