比较两个字符串C++时的错误输出
我有一个类CPerson,简单来说,它是这样的:比较两个字符串C++时的错误输出,c++,string,vector,iterator,compare,C++,String,Vector,Iterator,Compare,我有一个类CPerson,简单来说,它是这样的: CPerson { public: CPerson(); pair<string, string> CP_surname_name; vector<CCar> CP_CarList; }; 我已重写运算符
CPerson
{
public:
CPerson();
pair<string, string> CP_surname_name;
vector<CCar> CP_CarList;
};
我已重写运算符<,因此排序很好。
但当我需要检查时,如果姓氏与CP姓氏完全相同,请:
if(surname_name == (*it).CP_surname_name){...}
即使它们是一样的,它也给我错误的感觉。
我已经试过了:
if(surname_name.first == (*it).CP_surname_name.first && surname_name.second == (*it).CP_surname_name.second){...}
它的工作原理是一样的。
我还尝试了strcmp,但它给了我错误,因为我使用的是字符串,而不是char*,所以我尝试了append.c_str来重新键入它,这也给了我错误的结果。字符串中的比较类也不起作用。
谢谢你的帮助,很抱歉我的英语不好
代码部分:
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车辆列表中,当没有与th参数相等的人时,我会将带有CCar的CPerson添加到列表中。如何声明姓氏?它的内容是什么?它是如何初始化的?您是如何实现运算符的<?pair-name\u-name=make\u-pairsurname,name,其中姓氏和名称是用户输入的字符串。是的,我已经覆盖了运算符<的空气类型。作为一个健全的检查,您是否确保使用make_pairsurname,name来存储输入的名称,而不是make_pairname,姓氏?而不是解释您已经做了什么,而是显示实际的代码。你所描述的听起来应该有用。如果没有,则表示代码错误。但是如果没有看到代码,没有人能告诉你它出了什么问题。
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;