Предыдущий пост -

Класс таблицы символов и класс ее элементов

Рубрика: C++, Дата: 2 March, 2013, Автор:
Tags:

Разработайте класс таблицы символов и класс элементов этой таблицы для какого либо языка. Посмотрите на какой -нибудь компилятор для этого языка, чтобы узнать как в действительности выглядит таблица символов.

Опять задача из разряда которая делается несколько дней.Как оказалось не такая и сложная задачка, если я ее правильно конечно сделал, но так как у меня учителя нет, который мог бы проверить, а токо самосознание, то я нихо втуливаться правильно не правильно, а как сделал так сделал.

Я короче решил, что таблица символов это все символы языка допустим switch или * или new или разные там слова, (хотя switch это как бы оператор языка, f * это тож оператор ну и фиг с ним). Вообщем отак приняли, можно любой втулить.

Вот какой класс у меня получился файл Table.h:

//declaration Table.h
#ifndef TABLE_H
#define TABLE_H
#include <string>
using std::string;

//tablica cimvolov (yzel)
struct Simbol
{
	Simbol(string a)
	:val(a),nextPtr(0)
	{
		//pyctoi konctryktor
	}
	string val;
	Simbol* nextPtr;
};

class Table
{
	Simbol* firstPtr;
public:
	//konctryktor
	Table();

	//dobavit6 cimvol
	void addSim(string s);

	//vuvecti tablicy
	void print();
private:
	//dobavit6 cimvol helper //peredaem ykazatel6 na ykazatel6 dl9 izmeneni9
	void addSimHelper(Simbol** ptr,string &s);
	//vuvecti cimvol
	void printHelper(Simbol* ptr);
};

#endif

Файл Table.cpp:

//definichin klacca Table

#include "Table.h"

//konctryktor
Table::Table()
:firstPtr(0)//inicializaci9
{
	//pyctoi konctryktor
}

//dobavit6 cimvol
void Table::addSim(string s)
{
	if(firstPtr==0)//pycta9 tablica
	{
		cout <<"pycta9 tablica"<<endl;
		firstPtr=new Simbol(s);
	}
	else
	{
		cout <<"ne pycta9 tablica"<<endl;
		addSimHelper(&firstPtr->nextPtr,s);

	}
}

//dobavit6 cimvol helper
void Table::addSimHelper(Simbol** ptr, string &s)
{
	if(*ptr==0)
	{
		*ptr=new Simbol(s);
	}
	else //ne poclednii element
	{
		addSimHelper(&(*ptr)->nextPtr,s);
	}
}

//vuvecti tablicy
void Table::print()
{
	if(firstPtr==0)
	{
		cout <<"Table empty"<<endl;
	}
	else
	{
		cout <<firstPtr->val<<' '<<endl;
		printHelper(firstPtr->nextPtr);
	}
}

//vuvecti cimvol
void Table::printHelper(Simbol* ptr)
{
	if(ptr!=0)
	{
		cout <<ptr->val<<' '<<endl;
		printHelper(ptr->nextPtr);
	}
}

dи сама программа как всегда любое название файла

//razrabotat6 klacc tablicu cimvolov i klacc ee elementov
#include <iostream>
using std::cout;
using std::endl;

#include "Table.h"

int main()
{
	Table a;
	a.addSim("hellow");
	a.addSim("dada");

	cout <<endl<<"vuvod tablicu cimvolov"<<endl;
	a.print();

	return 0;
}

Вторую часть задачи я не стал смотреть. Нафиг оно мне нада искать таблицу символов разбирать ее. Либо свою создавать для языка. Хотите создавайте, класс, то я создал.

Даже не ожидал, что так быстро меньше часа, видно рука набита.

Да быстро, то быстро но мне пришлось модифицировать чуток класс, добавить поиск строке, чтобы можно было искать переменные.

Table.h:

//declaration Table.h
#ifndef TABLE_H
#define TABLE_H
#include <string>
using std::string;

//tablica cimvolov (yzel)
struct Simbol
{
	Simbol(string a,int b)
	:val(a),nextPtr(0),znach(b)
	{
		//pyctoi konctryktor
	}
	string val;
	int znach;
	Simbol* nextPtr;
};

class Table
{
	Simbol* firstPtr;
public:
	//konctryktor
	Table();
	
	//dobavit6 cimvol
	void addSim(string s,int b);
	
	//vuvecti tablicy
	void print();
	
	//vuvod elementa po znacheniyu ecli nety to return 0;
	int poick(string s);
private:
	//poick helper
	int poickHelper(Simbol** ptr,string& s);
	//dobavit6 cimvol helper //peredaem ykazatel6 na ykazatel6 dl9 izmeneni9
	void addSimHelper(Simbol** ptr,string& s,int& b);
	//vuvecti cimvol
	void printHelper(Simbol* ptr);
};

#endif

Table.cpp:

//definichin klacca Table
#include <cstdlib>
using std::exit;

#include "Table.h"

//konctryktor
Table::Table()
:firstPtr(0)//inicializaci9
{
	//pyctoi konctryktor
}

//dobavit6 cimvol
void Table::addSim(string s,int b)
{
	if(firstPtr==0)//pycta9 tablica
	{
		cout <<"pycta9 tablica"<<endl;
		firstPtr=new Simbol(s,b);
	}
	else
	{
		cout <<"ne pycta9 tablica"<<endl;
		addSimHelper(&firstPtr->nextPtr,s,b);
		
	}
}

//dobavit6 cimvol helper
void Table::addSimHelper(Simbol** ptr, string &s,int& b)
{
	if(*ptr==0)
	{
		*ptr=new Simbol(s,b);
	}
	else //ne poclednii element
	{
		addSimHelper(&(*ptr)->nextPtr,s,b);
	}
}

//vuvecti tablicy
void Table::print()
{
	if(firstPtr==0)
	{
		cout <<"Table empty"<<endl;
	}
	else
	{
		cout <<firstPtr->val<<' '<<firstPtr->znach<<endl;
		printHelper(firstPtr->nextPtr);
	}
}

//vuvecti cimvol
void Table::printHelper(Simbol* ptr)
{
	if(ptr!=0)
	{
		cout <<ptr->val<<' '<<ptr->znach<<endl;
		printHelper(ptr->nextPtr);
	}
}

//vuvod elementa po znacheniyu ecli nety to return 0;
int Table::poick(string s)
{
	cout <<"s= "<<s<<endl;
	if(firstPtr==0)
	{
		cout <<"cpicok pyct"<<endl;
	}
	else
	{
		cout <<"ne pyct cpicok"<<endl;
		if(firstPtr->val==s)
		{
			return firstPtr->znach;
		}
		else
			return poickHelper(&firstPtr->nextPtr, s);
	}
	exit(1);
}

//poick helper
int Table::poickHelper(Simbol** ptr,string& s)
{
	int res;
	if(*ptr!=0)
	{
		if((*ptr)->val==s)
		{
			res=(*ptr)->znach;
		}
		else
			return poickHelper(&(*ptr)->nextPtr,s);
	}
	
	return res;
}

и сама main()

//razrabotat6 klacc tablicu cimvolov i klacc ee elementov
#include <iostream>
using std::cout;
using std::endl;

#include "Table.h"

int main()
{
	Table a;
	a.addSim("hellow",5);
	a.addSim("dada",3);
	cout <<a.poick("dada")<<endl;
	
	cout <<endl<<"vuvod tablicu cimvolov"<<endl;
	a.print();
	
	return 0;
}

Все вроде.

rss