简单PAT OJ题目求指教,报错Debug Assertion Failed!

lh2lh2 2015-08-27 12:53:23
求教大神,调试了半天,发现问题出在<algorithm>的sort算法。只要一运行到sort就出错误,求指教?
http://www.patest.cn/contests/pat-a-practise/1006


#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define MAX 10000

using namespace std;

string str[MAX];

class Person{
public:
string id;
string sign_in;
string sign_out;

};

vector<Person> x, y;

Person per[MAX];



int compare(Person a, Person b);
int compare2(Person a, Person b);

int main(){
int M;
cin >> M;
getchar();
for (int i = 0; i < M; i++){
getline(cin, str[i]);
char temp = str[i].at(0);
while (temp != ' '){
per[i].id.insert(per[i].id.end(),1,temp);
str[i].erase(0, 1);
temp = str[i].at(0);
}
str[i].erase(0, 1);
temp = str[i].at(0);
while (temp != ' '){
per[i].sign_in.insert(per[i].sign_in.end(), 1, temp);
str[i].erase(0, 1);
temp = str[i].at(0);
}
str[i].erase(0, 1);
temp = str[i].at(0);
while (str[i].size()>0){
per[i].sign_out.insert(per[i].sign_out.end(), 1, temp);
str[i].erase(0, 1);
if (str[i].size()>0)
temp = str[i].at(0); //可能为空
}
x.insert(x.end(), per[i]);
y.insert(y.end(), per[i]);
}

//读入字符串

sort(x.begin(), x.end(), compare);
sort(y.begin(), y.end(), compare2);

cout << x.begin()->id << " " << y.end()->id;

system("pause");
return 0;
}

int compare(Person a, Person b){
for (int i = 0; i < 8;i++)
if (i != 3 && i != 6 && a.sign_in.at(i)>b.sign_in.at(i))
return 1;
return 0;
}

int compare2(Person a, Person b){

for (int i = 0; i < 8; i++)
if (i != 3 && i != 6 && a.sign_out.at(i)>b.sign_out.at(i))
return 1;
return 0;
}


...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lh2lh2 2015-08-28
  • 打赏
  • 举报
回复
引用 2 楼 lile1234_show 的回复:

//临时修改!!
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define MAX 10000

using namespace std;

string str[MAX];

class Person{
public:
	string id;
	string sign_in;
	string sign_out;
};

class TimeData{
private:
	int m_nHour;
	int m_nMinute;
	int m_nSecond;
public:
	TimeData(const string& str)
	{
		sscanf_s(str.c_str(),"%02d:%02d:%02d",&m_nHour,&m_nMinute,&m_nSecond);
	}
	
	int compareValue(const TimeData& data)
	{
		if(m_nHour > data.m_nHour) { return 0; } else { return 1; }
		if(m_nMinute > data.m_nMinute) { return 0; } else { return 1; }
		if(m_nSecond > data.m_nSecond) { return 0; } else { return 1; }
		return 0;
	}
};

vector<Person> x, y;

Person per[MAX];

int compare(Person a, Person b);
int compare2(Person a, Person b);

int main(){
	int M;
	cin >> M;
	getchar();
	for (int i = 0; i < M; i++){
		getline(cin, str[i]);
		char temp = str[i].at(0);
		while (temp != ' '){
			per[i].id.insert(per[i].id.end(),1,temp);
			str[i].erase(0, 1);
			temp = str[i].at(0);
		}
		str[i].erase(0, 1);
		temp = str[i].at(0);
		while (temp != ' '){
			per[i].sign_in.insert(per[i].sign_in.end(), 1, temp);
			str[i].erase(0, 1);
			temp = str[i].at(0);
		}
		str[i].erase(0, 1);
		temp = str[i].at(0);
		while (str[i].size()>0){
			per[i].sign_out.insert(per[i].sign_out.end(), 1, temp);
			str[i].erase(0, 1);
			if (str[i].size()>0)
				temp = str[i].at(0); //可能为空
		}
		x.insert(x.end(), per[i]);
		y.insert(y.end(), per[i]);
	}

	sort(x.begin(), x.end(), compare);
	sort(y.begin(), y.end(), compare2);

	//outut min and max value
	cout << x.at(0).id << " " << y.at(y.size()-1).id;

	system("pause");
	return 0;
}

int compare(Person a, Person b){
	TimeData time1(a.sign_in);
	TimeData time2(b.sign_in);
	return time1.compareValue(time2);
}

int compare2(Person a, Person b){
	TimeData time1(a.sign_out);
	TimeData time2(b.sign_out);
	return time1.compareValue(time2);
}

谢谢您的细心解答,请问我的错误出在了哪里,好以后避免重复犯错,谢谢!!
孤影品茗 2015-08-28
  • 打赏
  • 举报
回复
你的compareValue函数明显不合理,第一个后面两个if永远不会执行!!!
fly_dragon_fly 2015-08-27
  • 打赏
  • 举报
回复
sort应该不会有什么错吧 y.end()->id; 这句是什么意思
lee_鹿游原 2015-08-27
  • 打赏
  • 举报
回复

//临时修改!!
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define MAX 10000

using namespace std;

string str[MAX];

class Person{
public:
	string id;
	string sign_in;
	string sign_out;
};

class TimeData{
private:
	int m_nHour;
	int m_nMinute;
	int m_nSecond;
public:
	TimeData(const string& str)
	{
		sscanf_s(str.c_str(),"%02d:%02d:%02d",&m_nHour,&m_nMinute,&m_nSecond);
	}
	
	int compareValue(const TimeData& data)
	{
		if(m_nHour > data.m_nHour) { return 0; } else { return 1; }
		if(m_nMinute > data.m_nMinute) { return 0; } else { return 1; }
		if(m_nSecond > data.m_nSecond) { return 0; } else { return 1; }
		return 0;
	}
};

vector<Person> x, y;

Person per[MAX];

int compare(Person a, Person b);
int compare2(Person a, Person b);

int main(){
	int M;
	cin >> M;
	getchar();
	for (int i = 0; i < M; i++){
		getline(cin, str[i]);
		char temp = str[i].at(0);
		while (temp != ' '){
			per[i].id.insert(per[i].id.end(),1,temp);
			str[i].erase(0, 1);
			temp = str[i].at(0);
		}
		str[i].erase(0, 1);
		temp = str[i].at(0);
		while (temp != ' '){
			per[i].sign_in.insert(per[i].sign_in.end(), 1, temp);
			str[i].erase(0, 1);
			temp = str[i].at(0);
		}
		str[i].erase(0, 1);
		temp = str[i].at(0);
		while (str[i].size()>0){
			per[i].sign_out.insert(per[i].sign_out.end(), 1, temp);
			str[i].erase(0, 1);
			if (str[i].size()>0)
				temp = str[i].at(0); //可能为空
		}
		x.insert(x.end(), per[i]);
		y.insert(y.end(), per[i]);
	}

	sort(x.begin(), x.end(), compare);
	sort(y.begin(), y.end(), compare2);

	//outut min and max value
	cout << x.at(0).id << " " << y.at(y.size()-1).id;

	system("pause");
	return 0;
}

int compare(Person a, Person b){
	TimeData time1(a.sign_in);
	TimeData time2(b.sign_in);
	return time1.compareValue(time2);
}

int compare2(Person a, Person b){
	TimeData time1(a.sign_out);
	TimeData time2(b.sign_out);
	return time1.compareValue(time2);
}

赵4老师 2015-08-27
  • 打赏
  • 举报
回复
在compare函数中设断点调试。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧