Caratteri e stringhe - Dipartimento di Informatica e Sistemistica

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=π
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++;