Следующий пост -

Обобщение формата для дат.

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

Обобщите входной формат для дат так, чтобы он включал даты типа Dec1985, 12/3/1990, 3/6/2001 и т.д. Переделайте упражнение из параграфа 17.8.[9], чтобы оно соответствовало новому формату.

Я наверно сразу приведу примерчик кода, хотя пару слов скажу введения. Что мы сделали? Мы сразу же заменили даты вида Dec1985 на вида 101985, так нам удобней работать в функции. Мы могли в функции ее обрабатывать в функции сразу переводить в число, но я не стал загромождать код лишней фигней, то есть переводом, я думаю не сложно в функции создать массив и сравнивать элемент наш с элементом массива и присвоить допустим те же числа этому элементу только с переводом. Я просто сразу накинул как бы готовое значение, а на самом деле если следовать точно условию, то нам нужно б еще и перевод сделать, ну да ладно обойдемся без этого, это все мелочь.

Вот примерчик кода:

#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;
	if(strlen(a)==6)
	{
		a1=(a[2]-'0')*1000+(a[3]-'0')*100+(a[4]-'0')*10+(a[5]-'0');
		a2=(a[0]-'0')*10+(a[1]-'0');
	}
	else
	{
		a1=(a[6]-'0')*1000+(a[7]-'0')*100+(a[8]-'0')*10+(a[9]-'0');
		a2=(a[4]-'0')*10+(a[5]-'0');
	}
	if(strlen(b)==6)
	{
		b1=(b[2]-'0')*1000+(b[3]-'0')*100+(b[4]-'0')*10+(b[5]-'0');
		b2=(b[0]-'0')*10+(b[1]-'0');
	}
	else
	{
		cout <<"hellow world"<<endl;
		
		b1=(b[6]-'0')*1000+(b[7]-'0')*100+(b[8]-'0')*10+(b[9]-'0');
		b2=(b[4]-'0')*10+(b[5]-'0');
		//exit(1);
	}

	cout <<"a1= "<<a1<<" a2= "<<a2<<" b1= "<<b1<<" b2= "<<b2<<endl;

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

int main()
{
	char str[100]="031944 041935 051970 021970 021944 051944 041944 01/02/1986";
	//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=xBs3p2nPBRo[/youtube]

rss