Vymýšlel jsem program, který by měl vstupní řetězec string, v kterém je uložen název nějakého souboru rozpoznat, zda-li se jedná o obrázek, nebo ne.
Výsledný kód mi ovšem příjde příliš složitý a zdlouhoavý a příjde mi, že tam nepoužívám vůbec principy objektového programování.
Věřím, že je zde plno možností jak tento kód různě zkrátit a ačkoliv mi vzhledem k jeho funkčnosti nesejde na jeho zkracování, zajímalo by mě, co tam mám navíc nebo zbytečně.
Snažil jsem se postupovat logicky, tak jak rozpoznávám jestli je soubor obrázkem např. já:
1) hledám v řetězci znak tečky, který je předzvěstí, že následující znaky budou příponou (nemusí být ovšem pravda, ale já předpokládám se soubory názvu např. P89753734.jpg )
2) pak čtu následující znaky a porovnávám je se známými připonami obrázky
3) na základě shody rozhoduju, jestli je soubor obrázek, nebo ne.
#include <set>
#include <string>
#include <iostream>
using namespace std;
int main () {
set <char> tecka;
set <char> ::iterator iter2;
tecka.insert('.');
string text = "posrany obrazek.jpg";
cout << text << endl;
static char pripona[5] = { 'x' , 'x' , 'x' , 'x', '\0' }; //pole pripona ma 5 znaku a posledni je null .abc\0
bool bylatecka = false; //prepinac zda-li byla nactena tecka a jeho vychozi hodnota
for (int i = 0; i < text.size(); i++) {
iter2 = tecka.find (text.at(i));
if (iter2 == tecka.end() && bylatecka == false)
cout << text.at(i);
else {
bylatecka = true; //v retezci se objevila tecka tzn.. dalsi tri pismena jsou pripona souboru
//(jak se soubor bude jmenovat .torrent, nebo kaja.gott.jpg tak jsem v pyci)
cout << text.at(i);
static int poc_pripony = 0;
if (poc_pripony <= 3) { //postupne zpaisujem aktualni čtené pismenko do pole pripona (mělo by začínat znakem ".")
pripona[poc_pripony] = text.at(i) ;
poc_pripony++;
} //if (poc pripony)
} //else (byla tecka)
} //for (int i)
for (static int poc_pripony1 = 0; poc_pripony1 <= 3; poc_pripony1++) { //jen vypise nazev pripony
cout << pripona[poc_pripony1];
} //for (int poc pripony)
char pripona_jpg[] = ".jpg"; //zde je seznam siroce uzivanych pripon obrazkovych souboru
char pripona_bmp[] = ".bmp";
char pripona_pgn[] = ".pgn";
char pripona_gif[] = ".gif";
char pripona_tga[] = ".tga";
char pripona_TGA[] = ".TGA";
char pripona_JPG[] = ".JPG";
char pripona_BMP[] = ".BMP";
char pripona_PGN[] = ".PGN";
char pripona_GIF[] = ".GIF";
if (!strcmp(pripona, pripona_jpg) || !strcmp(pripona, pripona_JPG) || !strcmp(pripona, pripona_gif) || !strcmp(pripona, pripona_GIF) || !strcmp(pripona, pripona_pgn) || !strcmp(pripona, pripona_PGN) || !strcmp(pripona, pripona_tga) || !strcmp(pripona, pripona_TGA))
cout << endl << "pripona" << pripona << " JE obrazek";
else
cout << endl << "pripona" << pripona << " NENI obrazek";
cout << endl;
return 0;
} //int main
Nějaké návrhy na zjednodušení?