Keresés

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

  • Szőkecica

    csendes tag

    válasz Pcmagicnet #2379 üzenetére

    Szia!
    Kicsit át alakítottam a kódodat, de ez így műxik. Bár én is most kezdtem tanulni nemrég a C-t ;-)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define SZOHOSSZ 5
    #define HOSSZU 100
    #define MAX_SZO 200

    /* Program ami minden 5 karakternél hosszabb szót átmásol egy másik tömbbe */
    int main(int argc, char** argv) {
    char s[MAX_SZO][HOSSZU], hosszuszo[MAX_SZO][HOSSZU];
    FILE* f = stdin;
    int i, counter, counterHosszu, len;

    counter = 0;
    counterHosszu = 0;

    while (!feof(f) && counter < MAX_SZO) {
    fscanf(f, "%s", s[counter]);
    len = strlen(s[counter]);
    if (len > SZOHOSSZ) {
    strcpy(hosszuszo[counterHosszu], s[counter]);
    counterHosszu++;
    }
    counter++;
    }

    printf("Hosszu szavak: \n");
    for (i = 0; i < counterHosszu; ++i) {
    printf("%s ", hosszuszo);
    }
    printf("\n");
    return 0;
    }

  • Korcsii

    őstag

    válasz Pcmagicnet #2379 üzenetére

    a \0 egy speciális karakter (NULL karakternek is hívják), szerepe, hogy jelezze a string végét (miért jó, azt csak akkor érted meg igazán, amikor nem engedik meg a string.h használatát :D)

    szóval egy char tömbben (stringben) csak egyszer szerepelhet, bár tárolhatsz mögötte bármit, meg is jegyzi, de nem fogja kiírni, mert a kiírás is \0-ig történik...

    strcat-tal lehet őket összefűzni, vagy ha egy mondatot akarsz egyben beleolvasni, akkor a szóközt is beleveszed, etc...

    scanf("[^\n]",string);
    pl én ezt szerettem anno, mindent beolvas addig, amíg sortörést nem talál... DE ez csak akkor alkalmazható, ha el is fér a string tömbben, azaz ha a feladat leírja, hogy márpedig csak ekkora meg ekkora lehet...

    a másik változatot:
    int i = 0;
    while((c = getchar()) != '\n') string[i++] = c;
    string[i] = '\0';

    a probléma ugyanaz, ha nem fér el a megadott helyen (regényt adsz neki), akkor elszáll a program, de ha meg van adva a méret, használható...

    ez utóbbiból azonban ki lehet indulni, ha dinamikusan akarjuk a memóriát lefoglalni: legjobb megoldás talán az, hogy foglalunk x méretűt, ha elérjük az x-et, foglalunk még egyszer akkorát, aztán a legvégén, amikor már az egész string megvan, megnézzük a méretét (vagy vesszük az i értékét), foglalunk egy akkorát, és belemásoljuk - így pont akkora helyet foglalunk neki, amekkora...

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