1. Sztring típus C-ben

Czirkos Zoltán · 2019.02.27.

Sztring típus és hozzá tartozó függvények, a FILE mintájára, C-ben

A feladat lényege: hozzunk létre egy sztring típust, és rejtsük a belsejébe a hossz számolását, a dinamikus memóriakezelést, és az egyéb nyűgöket, amik C-ben voltak. Így viselkedik a szabványos FILE típus is:

  FILE *fp;
  fp = fopen("nev.txt", "wt");
  fprinf(fp, "Helló világ\n");
  fclose(fp);

A belsejéről semmit nem kell tudnunk. Nem látunk bele, használni mégis tudjuk.


#include <cstring>
#include <cstdlib>
#include <cstdio>

// INTERFÉSZ
struct String {
    char *p;            // din.fogl char tömb, van \0 a végén
    size_t hossz;       // betűk száma, lezáró \0 nélkül
};

void string_letrehoz(String & hova, char const *mit);
void string_osszefuz(String & hova, String eleje, String vege);
void string_kiir(String mit);
void string_torol(String mit);


// HASZNÁLAT
int main() {
    String a, b;

    string_letrehoz(a, "alma");
    string_letrehoz(b, "fa");

    String c;
    string_osszefuz(c, a, b);       // c = a+b

    string_kiir(c);                 // almafa

    string_torol(a);
    string_torol(b);
    string_torol(c);
}


// IMPLEMENTÁCIÓ
void string_letrehoz(String & hova, char const *mit) {
    hova.hossz = strlen(mit);
    hova.p = (char*) malloc((hova.hossz+1) * sizeof(char));
    strcpy(hova.p, mit);
}

void string_nagybetusit(String melyik) {
    melyik.p[0] = toupper(melyik.p[0]);
}

void string_kiir(String & mit) {
    printf("%s", mit.p);
}

void string_osszefuz(String & hova, String eleje, String vege) {
    hova.hossz = eleje.hossz + vege.hossz;
    hova.p = (char*) malloc((hova.hossz+1) * sizeof(char));
    strcpy(hova.p, eleje.p);
    strcpy(hova.p + eleje.hossz, vege.p);
}

void string_torol(String mit) {
    free(mit.p);
}