Чтение дат из потока и вывод.

Рубрика: C++, Дата: 14 May, 2013, Автор:

Читайте даты из потока ввода, например, Dec85, Dec50, Jan76 и т. д., а потом выведите их так, чтобы более поздние даты шли первыми. Формат дат должен состоять из трех символов под месяц, после чего следует два символа под год. Полагаем, что все годы относятся к одному веку.

Задачка не сложная на сортировку. Так мы просто чуток изменим условие, мы месяц запишем в виде числа от 1 до 12. В общем от примерчик кода:

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#include <cstring>
using std::strtok;
using std::strcmp;
#include <list>
using std::list;
#include <cstdlib>
using std::exit;

bool may(char* a, char* b)
{
	int a1,a2,b1,b2;
	a1=(a[2]-'0')*10+(a[3]-'0');
	a2=(a[0]-'0')*10+(a[1]-'0');
	b1=(b[2]-'0')*10+(b[3]-'0');
	b2=(b[0]-'0')*10+(b[1]-'0');

	if(a1>b1)
			return true;
	else if(a1==b1)
		if(a2>b2)
			return true;
		else
			return false;
	else
		return false;
}

int main()
{
	char str[40]="0344 0435 0570 0270 0244 0544 0444";
	cout <<"vvedite datu"<<endl;
	cin.getline(str,40);
	//cout <<str<<endl;exit(1);
	list<char*> l;
	char* leksema=strtok(str," ");
	
	//exit(1);
	while(leksema!=NULL)
	{
		//cout <<leksema<<endl;
		l.push_back(leksema);
		leksema=strtok(NULL," ");
	}

	//отсортируем l
	l.sort(may);

	//вывод
	list<char*>::iterator it;
	for(it=l.begin();it!=l.end();++it)
		cout <<*it<<endl;

	return 0;
}

[youtube]http://www.youtube.com/watch?v=1yth0IwA_m0[/youtube]

rss