wektory, funkcje, rozumienie kodu c++, argumenty

Odpowiedz Nowy wątek
2013-10-29 17:14
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;

}

Pozostało 580 znaków

2013-10-29 18:34
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.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
"Deklaracja funkcji ..." - może jednak początek definicji. - _13th_Dragon 2013-10-29 19:17
No tej linijce to bliżej do deklaracji niz do definicji ;) Tylko średnika brakuje :P - Shalom 2013-10-29 19:18
Dla tego napisałem początek deklaracji - do którego to nic nie brakuje ;P - _13th_Dragon 2013-10-29 19:20

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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