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);
}