Hirdetés

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

  • Sk8erPeter
    nagyúr

    Azért kínálgatják a wchar.h-t, hogy az ékezetes karaktereket helyesen tudd kezelni. Éppen csak azt felejtették el megmondani, hogy milyen kódolásban van a fájl. :U

    Igen, ha mondatonként olvasol be, az jó megoldás lehet. Figyelned kell arra, hogy esetleg nem fér bele a pufferbe, ezért dinamikusan kell méretezni. Vagy, ha nagyon csúnyán akarod, akkor egyszerre be is olvashatod az egész fájlt :Y Mindenesetre azt kellene tudni, mi határoz meg egy mondatot - erre jó lenne ha a specifikáció kitért volna. Márcsak azért is, mert bizonyos esetkben igen nehéz eldönteni. Például az Apám neve id. Kiss János. az hány mondat is? :F Ennek hiányában egyszerű szabályként például azt lehet használni, hogy a mondat vége ott van ahol egy vagy több ., ! vagy ? áll ami után a következő betű nagy. De ezt mindenképp rögzíteni kell a dokumentációban. Összességében ez egy igen rosszul specifikált probléma, szerintem ne vállald el :DD

    A másik kérdésre: valamilyen alkalmas adatszerkezetben nyilván kell tartani a szavakat. Ahogy olvasod a bemenetet, a megfelelő szó előfordulásainak számát növeled. Tipikusan erre a hash tábla a célszerű, de mivel C-ben ilyen nincs, ezért például egy láncolt lista vagy egy bináris fa is megteszi. MOD: persze ilyenek sincsenek, de könnyebb csinálni ;)

    Mi így oldottuk meg az ékezetes karakterek helyes megjelenítését:

    char * magyarit(const char * src){
    unsigned i;
    static char dest[2000];
    for(i=0;src[i];i++){
    switch(src[i]){
    case 'á': dest[i]=160; break;
    case 'é': dest[i]=130; break;
    case 'í': dest[i]=161; break;
    case 'ó': dest[i]=162; break;
    case 'ö': dest[i]=148; break;
    case 'ő': dest[i]=139; break;
    case 'ú': dest[i]=163; break;
    case 'ü': dest[i]=129; break;
    case 'ű': dest[i]=251; break;
    case 'Á': dest[i]=181; break;
    case 'É': dest[i]=144; break;
    case 'Í': dest[i]=214; break;
    case 'Ó': dest[i]=224; break;
    case 'Ö': dest[i]=153; break;
    case 'Ő': dest[i]=138; break;
    case 'Ú': dest[i]=233; break;
    case 'Ü': dest[i]=154; break;
    case 'Ű': dest[i]=235; break;
    default: dest[i]=src[i];
    }
    }
    dest[i]=0;
    return dest;
    }

    Aztán printf-nél meg így hivatkozom rá, pl.:

    printf(magyarit("Nettó ár: "));

    Ez itt nem lenne jó?

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