[[lexi_c]]
 
#include "stdafx.h"
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
 
const int K = 5;
 
const char minc = ' ';
const char maxc = 127;
 
struct Item
{
   char a [K];
   Item * next;
   Item () : next (nullptr) { }
};
 
struct List 
{
   Item * first;
   Item * last;
   List () : first (nullptr), last (nullptr) { }
   void addLast (Item * p);
};
 
void List::addLast (Item * p)
{
	p->next = nullptr;
	if (first == nullptr)
		first = p;
	else
		last->next = p;
	last = p;
}
 
List queue;
 
void add (const char * s)
{
	Item * p = new Item;
	int len = strlen (s);
	int i = 0;
	while (i < K && i < len)
	{
		char c = s[i];
		if (c < minc) c = minc;
		if (c > maxc) c = maxc;
		p->a[i] = c;
		i ++;
	}
	while (i < K)
	{
		p->a[i] = minc;
		i ++;
	}
	queue.addLast (p);
}
 
 
void split(int p){
	List tab [maxc+1];
	Item *item = queue.first;
	while (item!=nullptr)
	{
		char x = item->a[p];
		Item *item2 = item->next;
		tab[x].addLast(item);
		item=item2;
	}
	queue.first = nullptr;
	queue.last = nullptr;
	for (int i = minc; i <= maxc; i++)
	{
		if (tab[i].first != nullptr)
		{
			if (queue.first != nullptr)
				queue.last->next = tab[i].first;
			else
				queue.first = tab[i].first;
			queue.last = tab[i].last;
		}
	}
}
 
int _tmain(int argc, _TCHAR* argv[])
{
	add ("ahoj");
	add ("abc");
	add ("ale");
 
	for (int p = K-1; p >= 0; p--)
		split (p);
 
	Item * u = queue.first;
	while (u != nullptr)
	{
   	    for (int p = 0; p < K; p++)
  		   cout << u->a[p];
		cout << endl;
		u = u->next;
	}
 
	cout << "Konec - stisknete enter" << endl;
 
	char c;
	cin >> c;
 
	return 0;
}
 
lexi_c.txt · Last modified: 2015/05/14 15:47 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki