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_int

serve per cambiare nome a un istruzione