Hirdetés

Új hozzászólás Aktív témák

  • Jester01
    veterán

    jó sok if. nekem valami ilyesmi szimpibb lenne.

    char * tomb[] = {"2\0", "22\0", "222\0","3","33","333","4","44",
    "444","5","55","555","6","66","666","7","77","777","7777","8",
    "88","888","9","99","999","9999"};

    int abetu = 'a';
    int Abetu = 'A';
    char nev[10000];
    gets(nev);
    int i = 0;
    //* char elozo=0;
    while(i<(strlen(nev)))
    {
    if (i > 0 && nev[i] == nev[i-1]) {printf(" "); }
    //*vagy if (elozo == nev[i]) {printf(" ");}
    //* elozo = nev[i];
    if (nev[0] < abetu) {printf("%s",tomb[nev[0]-Abetu]);}
    else {printf("%s",tomb[nev[0]-abetu]);}
    i++;
    }

    Ja, ilyesmi lenne a tömbös. Csak nem jó :P Mert azt kell nézni, hogy a leképezett számjegy ugyanaz-e mint az előző, nem pedig a betű. Ha "a" betű után jön "b" betű, akkor is kell a szóköz, ugyebár. Becsúszott néhány nev[0] a nev [ i ] helyett, de ez gondolom csak elírás, ugyanúgy mint a felesleges \0 a tömbben.

    Ha nagyon kötözködni akarnék akkor további észrevételek (nem rosszindulatból :R ):
    * az a tömb igazából const char* tomb[] kellene legyen
    * A gets annyira rossz, hogy a gcc szól is érte (fgets helyette)
    * while feltételbe strlen nem jó ötlet hatékonyság miatt
    * printf helyett fputs/fputc és tsai (ha egyszer semmi formázás nincs, akkor minek a printf)
    * toupper/tolower valamelyike (vagy ha nagyon trükkös valaki, akkor bit művelet)
    *.ellenőrizni kellene, hogy betű jött-e egyáltalán

Új hozzászólás Aktív témák