// Rodzaj to typ wyliczeniowy enum
// Nagłówku funkcji nie mogę zmienić, bo taki mam w poleceniu
void Tekst::pobierzPlik(bool flaga, Rodzaj przyznany, ifstream& wejscie)
{
char litera;
unsigned short licznik = 0;
switch(przyznany)
{
case alfabetyczne :
while(!wejscie.eof())
{
wejscie.get(litera);
if(isalpha(litera) && licznik<ROZMIAR)
{
znaki[licznik]=litera;
licznik++;
}
}
znaki[licznik]='\0';
break;
case alfanumeryczne :
while(!wejscie.eof())
{
wejscie.get(litera);
if(isalnum(litera) && licznik<ROZMIAR)
{
znaki[licznik]=litera;
licznik++;
}
}
znaki[licznik]='\0';
break;
case bezBialychZnakow:
while(!wejscie.eof())
{
wejscie.get(litera);
if(!isspace(litera) && licznik<ROZMIAR)
{
znaki[licznik]=litera;
licznik++;
}
}
znaki[licznik]='\0';
break;
case bezNowychWierszy:
while(!wejscie.eof())
{
wejscie.get(litera);
if(litera!='\n' && licznik<ROZMIAR)
{
znaki[licznik]=litera;
licznik++;
}
}
znaki[licznik]='\0';
break;
}
}
Chciałbym skrócić powyższy kod. Jest to funkcja, która ma odczytywać odpowiednie znaki z pliku (litery alfabetu, znaki alfanumeryczne, znaki z pominięciem białych albo znaki z pominięciem nowego wiersza). Jak widać cztery "podfunkcje" (wybaczcie za robocze określenie) różnią się wyłącznie podświetlonymi warunkami... Czy można jakoś te warunki przypisać np. zmiennym, by switch mógł decydować o warunku? Zmiennym logicznym nie bardzo, bo te są w stanie przekazać jedynie true lub false... Przydałoby się jakoś wykorzystać w tym wszystkim flagi... Może da się bez switcha? Mógłbym prosić o jakieś pomysły?