String Functions
Am învățat că string-urile în C sunt tablouri de char care se termină cu '\0'. Să lucrezi cu ele manual (caracter cu caracter) este obositor. Biblioteca string.h ne dă funcții gata făcute
#include <stdio.h>
#include <string.h>
int main(void) {
char nume[] = "Dennis Ritchie";
printf("Lungime: %lu\n", strlen(nume));
return 0;
}
Ieșire
Lungime: 14
strlen returnează numărul de caractere din string, FĂRĂ a număra '\0'. Tabloul real are 15 char-uri (14 litere + '\0'), dar strlen spune 14. Este o distincție importantă
strcmp: compară două string-uri
#include <stdio.h>
#include <string.h>
int main(void) {
char a[] = "banana";
char b[] = "mar";
char c[] = "banana";
printf("%d\n", strcmp(a, b)); // negativ (a vine inainte de b)
printf("%d\n", strcmp(b, a)); // pozitiv (b vine dupa a)
printf("%d\n", strcmp(a, c)); // 0 (sunt egale)
return 0;
}
strcmp returnează 0 dacă string-urile sunt egale, un număr negativ dacă primul vine înainte de al doilea (alfabetic), și un număr pozitiv dacă vine după. Reține: în C, nu poți compara string-uri cu ==. Asta compară adrese, nu conținut
strcpy: copiază un string în altul
#include <stdio.h>
#include <string.h>
int main(void) {
char sursa[] = "Salut";
char dest[20];
strcpy(dest, sursa);
printf("%s\n", dest); // Salut
return 0;
}
strcpy(dest, sursa) copiază totul din sursa în dest, inclusiv '\0'. Asigură-te că dest este suficient de mare! Dacă este prea mic, obții un buffer overflow, unul dintre cele mai periculoase bug-uri din programare. Așa apar vulnerabilitățile reale de securitate
strcat: concatenează (unește) două string-uri
#include <stdio.h>
#include <string.h>
int main(void) {
char salut[50] = "Salut, ";
strcat(salut, "teletype!");
printf("%s\n", salut); // Salut, teletype!
return 0;
}
strcat adaugă al doilea string la finalul primului. Din nou, asigură-te că tabloul destinație este suficient de mare pentru ambele string-uri plus '\0'
Un truc util: strstr (găsește un sub-string)
#include <stdio.h>
#include <string.h>
int main(void) {
char text[] = "imi place programarea in C";
char *gasit = strstr(text, "programarea");
if (gasit != NULL) {
printf("Gasit: %s\n", gasit); // Gasit: programarea in C
}
return 0;
}
strstr returnează un pointer către locul unde începe sub-string-ul, sau NULL dacă nu este găsit. NULL este felul lui C de a spune "nimic": este o valoare specială de pointer care înseamnă "pointează către nimic." Îl vom vedea des
Misiune: Asamblarea etichetei de bandă
O bandă magnetică veche și-a pierdut eticheta. Doi operatori diferiți au retranscris fiecare câte o jumătate, pe teletype-uri separate. Treaba ta: măsoară primul fragment, apoi unește ambele fragmente într-un singur string și afișează eticheta completă.
- Citește două cuvinte din input, primul și al_doilea (fără spații în interior)
- Afișează lungimea lui primul (folosește strlen)
- Copiază primul într-un tablou rezultat (folosește strcpy, fă rezultat suficient de mare:
char rezultat[50]) - Concatenează al_doilea la rezultat (folosește strcat)
- Afișează rezultat
Exemplu
Intrare
Bell Labs
Ieșire
4
BellLabs
Exemplu
Intrare
Tele type
Ieșire
4
Teletype