wektory, funkcje, rozumienie kodu c++, argumenty

0

Witam
Mam program który w większości napisany jest przez kogo innego, moje jest tylko "menu".
Proszę o pomoc w zrozumieniu, wytłumaczenie działania tych funkcji.
Np. co oznacza taki zapis :

dane[i].size(); 

lub int CountAlpha(vector<string>& dane)

Oraz do czego służą argumenty.
Z góry dziękuję


```cpp
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <string>
#include <cctype> // isalpha ->czy znak to litera
                  // tolower ->konwertuje na male litery 
using namespace std;



void FillData(vector<string>& dane){
	string linia;
	do{
		cout<<"podaj tekst (\"koniec\" - konczy: )";
		getline(cin,linia);
		if(linia!="koniec") dane.push_back(linia);
	}while(linia!="koniec");
}
void PrintData(vector<string>& dane){
	for(int i=0; i<dane.size();i++)
		cout<<dane[i]<<endl;
}
int CountChar(vector<string>& dane){
	int wynik = 0;
	for(int i=0; i<dane.size();i++)
		wynik +=dane[i].size();
	return wynik;
}
int CountAlpha(vector<string>& dane){
	int wynik =0;
	for(int i=0; i<dane.size();i++)
		for(int j=0;j<dane[i].size();j++)
			if(isalpha(dane[i][j])) wynik++;
	return wynik;
}
bool IsVowel(char znak){
	string vowels = "aeiouy";
	for(int i=0; i<vowels.size();i++)
		if(tolower(znak)==vowels[i]) return true;
	return false;
}
int CountVowel(vector<string>& dane ){
	int wynik = 0;
	for(int i=0; i<dane.size();i++)
		for(int j=0; j<dane[i].size();j++)
			if(IsVowel(dane[i][j])) wynik++;
	return wynik;
}
double liczenie()
	{
	vector<string> pojemnik;
	FillData(pojemnik);
	PrintData(pojemnik);
	cout<<"ilosc znakow w tekscie: "<<CountChar(pojemnik)<<endl;
	cout<<"ilosc liter w tekscie: "<<CountAlpha(pojemnik)<<endl;
	cout<<"ilosc samoglosek w tekscie: "<<CountVowel(pojemnik)<<endl;
	cout<<"ilosc spolglosek w tekscie: "<<CountAlpha(pojemnik)-CountVowel(pojemnik)<<endl;
	return 0;
	}
int menu()
{
	cout<<"++++++++++ Witaj ++++++++++"<<endl;
	int wybor;
	cout<<"Wybierz co chcesz zrobic....."<<endl;
	cout<<"1.-Liczenie glosek "<<endl;
	cout<<"2.-Wyjscie z programu "<<endl;
	cin>>wybor;
	
	if(wybor<1||wybor>2)
		cout<<"BLAD... NIEPRAWIDLOWY WYBOR"<<endl;
		
	else
	{
		switch(wybor)
		{
			case 1: liczenie();
				break;

			case 2: exit;
		}
	}
	return wybor;
}

int _tmain(int argc, _TCHAR* argv[])
{

	menu();

	

	system("pause");
	return 0;
	
}



 
0
dane[i].size(); 

Oznacza wywołanie metody size() na obiekcie który jest i-tym elementem wektora dane. Jako że elementami wektora są stringi to taka linijka zwróci dlugość i-tego stringa w wektorze.

 int CountAlpha(vector<string>& dane)

Deklaracja funkcji która zwraca liczbę całkowitą, a jako argument przyjmuje referencje do wektora stringów. Z faktu ze przyjmuje referencje wynika, ze jeśli wewnątrz funkcji zmienisz ten wektor (np. coś do niego dodasz) to zmieni się on też poza funkcją. Ale w tym kodzie to tylko kosmetyka, która sprawia że wektor nie jest niepotrzebnie kopiowany w chwili wywołania funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1