比较两个字符串C ++时输出不正确

时间:2015-03-31 10:34:04

标签: c++ string vector iterator compare

我有类CPerson,简单的看起来像这样:

CPerson
{
public:
   CPerson();
   pair<string, string> CP_surname_name;
   vector<CCar> CP_CarList;
};

然后我有vector<CPerson> CR_people 它是按CP_surname_name对排序的向量。 问题是,当我需要比较姓氏和姓名时,首先由用户输入我去传播,如果已经有我正在寻找的人。

auto it = lower_bound(CR_people.begin(), CR_people.end(), surname_name);

我有覆盖运算符&lt;所以排序很好。 但是当我需要检查时,如果surname_name与CP_surname_name完全相同:

if(surname_name == (*it).CP_surname_name){...}

它给了我false即使它们是相同的。 我已经尝试过了:

if(surname_name.first == (*it).CP_surname_name.first && surname_name.second == (*it).CP_surname_name.second){...}

它的工作方式相同。 我也试过strcmp()但它给了我错误,因为我使用的是字符串,而不是char *所以我尝试追加.c_str()来重新输入它,这也给了我错误的结果。 String类中的compare()也不起作用。 谢谢你的帮助,对不起我的英语不好。

代码部分:

bool CRegister::AddCar( const string & rz, const string & name, const string & surname )
{
pair<string, string> SurName = make_pair(surname, name);
CCar newCar = CCar(rz, SurName);

if(CR_people.size() == 0 && CR_cars.size() == 0)
{
    CR_people.push_back(CPerson(name,surname,rz));
    CR_cars.push_back(newCar);
    return true;
}
else if(CR_people.size() != 0 && CR_cars.size() != 0)
{
    auto it = lower_bound(CR_cars.begin(), CR_cars.end(), rz);

    if( it < CR_cars.end() && (*it).CC_rz.c_str() == rz.c_str()){return false;}
    CR_cars.insert(it, newCar);

    auto it2 = lower_bound(CR_people.begin(), CR_people.end(), SurName);

    if( (*it2).CP_SnNm.first.c_str() == SurName.first.c_str() && (*it2).CP_SnNm.second.c_str() == SurName.second.c_str())
    {
        cout << "Cannot get here" << endl;
        if((*it2).CPAddCar(rz))
            return true;
        return false;
    }
    else
    {
        CR_people.insert(it2, CPerson(name, surname, rz));
        return true;
    }

    throw "Error, Add Car to register";
    return false;
}
return false;

}

代码的含义是,当我已经在我的列表中有人时,我只是将CCar添加到汽车的CPersons列表中,并且当没有人等于参数时,我在其列表中添加带有CCar的CPerson。

0 个答案:

没有答案