Zazwyczaj umieszczam klasę w oddzielnych plikach .h i .cpp, ale to nie jest duża klasa, więc umieściłem ją w pliku text.cpp i text.h, gdzie mam szereg przydatnych funkcji tekstowych.
text.h
#ifndef text
#define text
using namespace std;
bool is_white(string linia); //sprawdza czy linia składa sie jedynie z białych znaków lub jest pusta
bool is_completely_empty(string linia); //sprawdza czy linia jest pusta
bool is_comment(string linia); //sprawdza czy linia jest komentarzem
bool is_upper(char znak); //sprawdza czy znak jest dużą literą (funkcja uwzględnia też polskie znaki)
bool is_int_convert(string linia); //sprawdza czy linię można przekonwertować na liczbę całkowitą
string without_tab(string linia); //zwraca linię z usuniętymi tabulacjami
int counting(string nazwa); //zlicza ilość linii w pliku
int strtoint(); //prosi o wpisanie poprawnego łańcucha znaków i konwertuje go na liczbę całkowitą
string rewrite(string plik, string *tab);
class Coding;
#endif
text.cpp
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <windows.h>
#include "text.h"
using namespace std;
bool is_white(string linia)
{
int i=0;
for(int i=0; i<linia.size(); i++)
{
if(isgraph(linia[i]))
return false;
}
return true;
}
bool is_completely_empty(string linia)
{
if(linia.size()==0)
return true;
return false;
}
bool is_comment(string linia)
{
if(linia[0]=='/' && linia[1]=='/')
return true;
return false;
}
bool is_upper(char znak)
{
if( (int(znak)>64 && int(znak)<91)
|| int(znak)==-91 || int(znak)==-58 || int(znak)==-54
|| int(znak)==-93 || int(znak)==-47 || int(znak)==-45
|| int(znak)==-116 || int(znak)==-113 || int(znak)==-81 )
return true;
return false;
}
bool is_int_convert(string linia)
{
for(int i=0; i<linia.size(); i++)
{
if(int(linia[i])<48 || int(linia[i])>57)
return false;
}
return true;
}
string without_tab(string linia)
{
string linijka="";
for(int i=0; i<linia.size(); i++)
{
if( int(linia[i])!=9 )
linijka = linijka + linia[i];
}
return linijka;
}
int counting(string nazwa)
{
fstream plik;
string linia;
int ilosc_linii=0;
plik.open(nazwa.c_str(), ios::in);
while(getline(plik,linia))
ilosc_linii++;
plik.close();
return ilosc_linii;
}
int strtoint()
{
string napis;
cin>>napis;
while( !(is_int_convert(napis)) )
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
cout<<"Nieprawidłowe dane. Wprowadź jeszcze raz: ";
cin>>napis;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
}
return atoi(napis.c_str());
}
void rewrite(string nazwa_pliku, string *tab)
{
fstream plik;
string linia;
int linii=0;
plik.open(nazwa_pliku.c_str(), ios::in)
while(getline(plik,linia))
{
linii++;
}
plik.close();
tab = new string [linii];
string *wskaznik = tab;
plik.open(nazwa_pliku.c_str(), ios::in)
while(getline(plik,linia))
{
*wskaznik = linia;
wskaznik++;
}
plik.close();
}
class Coding
{
public:
string plik1;
string plik2;
int ile;
Coding(string p1, string p2)
{
plik1 = p1;
plik2 = p2;
fstream plik;
string linia;
ile = counting(plik1);
char *co;
co = new char [ile];
char *wsk1 = co;
char *na_co;
na_co = new char [ile];
char *wsk2 = na_co;
plik.open(plik1.c_str(), ios::in);
while(getline(plik,linia))
{
*wsk1=linia[0];
wsk1++;
}
plik.close();
plik.clear();
plik.open(plik2.c_str(), ios::in);
while(getline(plik,linia))
{
*wsk2=linia[0];
wsk2++;
}
plik.close();
plik.clear();
}
string wys(string napis)
{
string linia="";
for(int i=0; i<napis.length(); i++)
{
if( (int)x[i] >=0 && (int)x[i]<=255)
linia = linia + napis[i];
else
{
for(int j=0; j<ile; j++)
{
if( napis[ i ] == co[ j ])
{
linia = linia + na_co[ j ];
break;
}
}
}
}
return linia;
}
};