Academic Year: 2022-2023 Class: Programmazione Calcolatori (Class) Created: March 29, 2023 Tag: C MOC Type: Lecture
stinghe in c
sono array
char a[] = "abcd"; Carattere terminatore:
tutte le strighe contengono un carattere in più posizionato alla fine:
- es: contiene 4 caratteri + 1 terminatore (5 caratteri totali)
 - carattere terminatore: ‘\0’ (null character)
 - 
- è presente in tutte le stringhe
 
 
Warning
Quando creiamo una stringa in run time dobbiamo inserire noi il carattere terminatore
Lunghezza stringa (non contano nullchar)
#include <stdio.h>
// Function that returns the length of a string
 
int str_len(char *s){
	int i = 0;
 
	while(s[i] != '\0'){
		i++;
	}
	return i;
}Come funziona la stampa di una stringa
int main(){
	char a[] = "Hello";
	int i = 0; // counter
	
	while(a[i] != '\0'){
		printf("%c", a[i]);
		i++;
	}
printf("\n");Concatenzione di stringhe V0
char *str_cat0(char *s1, char *s2){ //versione 0 (non ottimizzata, infatti calcola 2 volte la lunghezza di s1 e s2)
 
	char *s3 = malloc(str_len(s1) + str_len(s2) + 1) * sizeof(char);
	int i = 0;
 
	for(i = 0; i < str_len(s1); i++){ // costo O(n^2)
		s3[i] = s1[i
	}
	for(i = 0; i < str_len(s2); i++){ // costo O(n^2) 
		s3[i] = s2[i-str_len(s1)];
	}
 
}- Non è una funzione ottimizzata ogni volta ri calcola la lunghezza delle stringe
 - Che inserita in un for ha un costo lineare
 
Concatenzione di stringhe V1
char *str_cat(char *s1, char *s2){ //versione ottimizzata
	char *s3 = malloc(str_len(s1) + str_len(s2) + 1) * sizeof(char);
 
	int i = 0;
	int n = str_len(s1); //costo O(n)
	int m = str_len(s2); //costo O(n)
 
	for(i = 0; i < n; i++){ // costo O(n)
		s3[i] = s1[i];
	}
	
	for(i = 0; i < m; i++){ // costo O(n)
	s3[i] = s2[i-n];
}- Calcoliamo la lunghezza inizzialmente cosi da non dover ripetere il colacolo
 
Strutture (struct)
istruzione typedef
typedef int intero
typedef struct array_int array_intserve per cambiare nome a un istruzione