Przekazywanie argumentów do funkcji przez wartość i referencje. Rekurencyjne wywołanie funkcji. Argumenty funkcji main.
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
/**
	Podstawowa struktura do przetwarzania w programie
*/
struct statStr {
	std::string uName;
	int cLetter;
	int cToken;
};
/**
	Prototyp funkcji do uzupelniania struktury
	Struktura przekazywana jest przez referencje a nie wartosc.
	Jesli ktoras grupa chce korzystac z tego rozwiazania, to prosze podac
	uzasadnienie tego zabiegu oraz tego jak takie przekazywanie dziala.
	Proponuje zastosowania przekazywania przez wartosc, ktore latwiej jest na poczatku zrozumiec.
*/
void fillStr(statStr &sStr);
/**
	Prototyp funkcji do pokazywania elementow (pol) struktury.
	Struktura przekazywana jest przez referencje a nie przez wartosc.
	Do czego sluzy modyfikator const w zapisie w przypadku gdy przekazujemy strukture przez referencje?
	Czy taki modyfikator jest potrzebny w przypadku przekazywania przez wartosc?
	Jesli ktoras grupa chce korzystac z tego rozwiazania, to prosze podac
	uzasadnienie tego zabiegu oraz tego jak takie przekazywanie dziala.
	Proponuje zastosowania przekazywania przez wartosc, ktore latwiej jest na poczatku zrozumiec.
*/
void showStr(const statStr &sStr);
/**
	Prototy funkcji do laczenia pol struktury.
	Struktury przekazywane sa przez referencje a nie przez wartosc.
	Do czego sluzy modyfikator const w zapisie w przypadku gdy przekazujemy strukture przez referencje?
	Czy taki modyfikator jest potrzebny w przypadku przekazywania przez wartosc?
	Jesli ktoras grupa chce korzystac z tego rozwiazania, to prosze podac
	uzasadnienie tego zabiegu oraz tego jak takie przekazywanie dziala.
	Proponuje zastosowania przekazywania przez wartosc, ktore latwiej jest na poczatku zrozumiec.
*/
statStr joinStr(const statStr &sStr1, const statStr &sStr2);
/**
	Prototyp funkcji do zliczania ilosci znakow w podanym lancuhcu
	@todo :: Dla zaintersowanych - sprawdzenie co to jest przeciazanie funkcji
	@todo :: Alterantywnie mozna napisac funkcje przetwarzajaca tablice znakow.
	@todo :: Dla zaintersowanych - Tworzenie przeciazonej wersji funkcji cLetter pobierajaca jako argument tablice znakow
*/
int cLetter(string s);
/**
	Prototyp funkcji do zliczania ilosci wyrazen w podanym lancuchu
	@todo :: Alterantywnie mozna napisac funkcje przetwarzajaca tablice znakow.
	@todo :: Dla zaintersowanych - sprawdzenie co to jest przeciazanie funkcji
	@todo :: Dla zaintersowanych - Tworzenie przeciazonej wersji funkcji cToken pobierajaca jako argument tablice znakow
*/
int cToken(string s);
/**
	Program prezentujacy mozliwosc wykorzystania funkcji operujacych
	na zdefiniowanej strukturze.
	@author Marcin Mironczuk
*/
int main()
{
	using namespace std;
	// Tworzenie zmiennych o typie statStr (struktura)
	statStr s1, s2;
	
	// Tworzenie zmiennej przechowujacej informacje z obu ww. struktur
	statStr sumaStr;
	// Uzupelnianie struktur
	fillStr(s1);
	fillStr(s2);
	std::cout << std::endl;
	// Pokazanie zawartosci struktur
	showStr(s1);
	showStr(s2);
	// Polaczenie struktur
	sumaStr = joinStr(s1, s2);
	// Pokazanie zawartosci struktury polaczonej
	showStr(sumaStr);
	std::cin.get();
	std::cin.get();
	return 0;
}
void fillStr(statStr &sStr) {
	std::string temp;
	
	int countLetter = 0;
	int countToken = 0;
	std::cout << "Podaj imie i nazwisko: " << std::endl;
	getline(std::cin, sStr.uName);
	std::cout << "Podaj lancuch do wprowadzenia: " << std::endl;
	getline(std::cin, temp);
	
	countLetter = cLetter(temp);
	countToken = cToken(temp);
	sStr.cLetter = countLetter;
	sStr.cToken = countToken;
}
void showStr(const statStr &sStr) {
	std::cout << "Podane imie i nazwisko to: " << sStr.uName << std::endl;
	std::cout << "Ilosc znakow w wprowadzonym lancuchu to: " << sStr.cLetter << std::endl;
	std::cout << "Ilosc wyrazen w wprowadzonym lancuchu to: " << sStr.cToken << std::endl;
	std::cout << std::endl;
}
statStr joinStr(const statStr &sStr1, const statStr &sStr2) {
	// Algorytm sumowania pol przekazywanych struktur
	statStr s;
	return s;
}
int cLetter(string s) {
	return s.length();
}
int cToken(string s) {
	// Algorytm zaimplementowany na wczesniejszych zajeciach
	return 0;
}