Caratteri e stringhe • Caratteri – Un carattere è rappresentato mediante un intero (es. codice ASCII) – Esempio: 'z' rappresenta il valore intero con cui si codifica il carattere z • Stringhe – Sono sequenza di caratteri che terminano con ‘\0’ – Esempio: • costante di tipo stringa : “Stringa costante” – Variabile di tipo stringa • E’ un puntatore al primo elemento della stringa • Due modi: vettore di caratteri, puntatore – – char color[]=“blue”; char *colorPtr=“blue”; Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi void strncpy (char *s,char *t) { int i; i=0; while ( (s[i]=t[i]) != '\0' ) i++; }; void strncpy (char *s,char *t) { while ( (*s++=*t++)!='\0') ; }; void strncpy (char *s,char *t) { while (*s++=*t++); }; Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi #include<stdio.h> int main (int argc,char*argv[]) { /*Echo argomenti*/ int i; for(i=1;i<argc;i++) printf("%s ",argv[i]); }; Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi int a[5][5]; int *b[5]; /*b è un vettore di puntatori*/ for (i=0;i<5;i++) { b[i]=(int*)malloc(5*sizeof(int)); }; heap a[4][4] 25x4= 100 byte . . . b[4] 5x4= 20 byte a[0][0] . b[0] Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi 25x4= 100 byte #include <stdio.h> int main(void){ int i; int *pi; int **ppi; i=10; pi=&i; ppi=&pi; printf("%d %d %d\n",i,*pi,**ppi); /*Stampa 10 10 10*/ return 0; } ppi pi i Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi • Dato un vettore A di N interi, stabilire il numero n di elementi diversi • Esempio: • A=[0,0,1,1,2,4,5], n=5 Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Algoritmo trova-elementi /*Calcola il numero di elementi diversi in A[0…N-1]*/ Leggi vettore A VISTI<-∅ n<-0 for i=0…N-1 if (A[i] ∉ VISTI) then VISTI <- VISTI ∪ A[i] incrementa n return n Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi int main(void){ int visti[N],A[N],n,i; n=0; for (i=0;i<N;i++) scanf("%d",&A[i]); for (i=0;i<N;i++) { if (!Trovato(A[i],n,visti)) { visti[n++]=A[i]; } } printf("%d ",n); system ("PAUSE"); }; Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi int Trovato(int elem,int size,int vett[]) { int i; for (i=0;i<size;i++) if (vett[i]==elem) return 1; return 0; } Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi • Dati due vettori D e P, di dimensione N ed M (N≥M), stabilire se P è un sottovettore di D. • Esempio: • D=[0 1 1 1 0], P=[0 1] : P è sottovettore di D • D=[0 1 1 1 0], P=[0 0] : P non è sottovettore di D Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi Algoritmo Pattern-matching /*Determina se Pattern è sottovettore di Dati*/ /*Il numero di elementi di Pattern, M, è <= al numero N di elementi di Dati*/ trovato<-FALSO i<-0 while (i<=N-M) AND (not trovato) confronta Pattern[0…M-1] con D[i…M+i-1] if sono uguali then trovato<-VERO incrementa i return trovato Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi int CercaPattern (const int dati[],const int pattern[],int N,int M) { /*Restituisce 1 se pattern e’ sottovettore di dati*/ int i,j,trovato; i=0;trovato=0; while ((i<=N-M) && (!trovato)){ j=0; while ((j<M) && (pattern[j]==dati[i+j])) if (j==M) trovato=1; ++i; }; return trovato; } Fondamenti di Informatica, Ingegneria Elettronica, Università “La Sapienza” Roma. aa 02-03. R. Beraldi j++;