presentazione di powerpoint - uniroma1.itbloisi/didattica/...corso di fondamenti di informatica...
TRANSCRIPT
![Page 1: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/1.jpg)
Corso di Fondamenti di Informatica
Ingegneria delle Comunicazioni BCOR
Ingegneria Elettronica BELR
Parte 8
Stringhe
Domenico Daniele Bloisi
Si ringrazia Raffaele Nicolussi
![Page 2: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/2.jpg)
2010/2011Stringhe
Parte 8
Pagina 2
Docenti
Parte I – prof. Silvio Salza
http://www.dis.uniroma1.it/~salza/fondamenti.htm
Parte II – ing. Domenico Daniele Bloisi
http://www.dis.uniroma1.it/~bloisi/didattica/fondinf1011.html
Nota: %7E corrisponde alla tilde ~
![Page 3: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/3.jpg)
Pagina 3
Informazioni Generali
ing. Domenico Daniele Bloisi, PhD
Dipartimento di Informatica e Sistemistica
Via Ariosto 25
(adiacente Piazza Dante,
A fermate Manzoni, Vittorio Emanuele,
Tram 3 fermata via Labicana)
mailto:[email protected]
http://www.dis.uniroma1.it/~bloisi
2010/2011Stringhe
Parte 8
![Page 4: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/4.jpg)
Ricevimento
Pagina 4
Martedì 15.00 – 17.00
DIS, via Ariosto 25
Aula docenti adiacente aula A4
Si consiglia di inviare una email per conferma e
di controllare la bacheca degli avvisi
http://www.dis.uniroma1.it/~bloisi/didattica/fondinf1011.html#Avvisi
2010/2011Stringhe
Parte 8
![Page 5: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/5.jpg)
Pagina 52010/2011
Sommario – Parte 8
• Array di caratteri: stringhe
• Inizializzazione di stringhe
• Lettura e scrittura di stringhe
• Operazioni sulle stringhe
• Funzioni per la manipolazione delle
stringhe: strcpy, strncpy, strcat, strncat,
strcmp, strstr
• Input/Output in C
• Stream
• File
Stringhe
Parte 8
![Page 6: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/6.jpg)
Pagina 62010/2011
Array di caratteri
Stringhe
Parte 8
Un caso particolare di array è quello
costituito da caratteri.
Infatti, le sequenze di caratteri servono per
gestire testi.
In C si usa il termine stringa per indicare gli
array di caratteri.
La libreria <string.h> offre alcune funzioni
speciali per gli array di caratteri.
![Page 7: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/7.jpg)
Pagina 72010/2011
Rappresentazione di stringhe in C
Stringhe
Parte 8
Nel linguaggio C una stringa è rappresentata
mediante un array di caratteri terminante
con il carattere speciale '\0' (codice ASCII = 0),
che quindi funge da terminatore di stringa.
In questo modo è possibile conoscere la
lunghezza di una stringa contando il numero
di caratteri che precedono il carattere '\0'.
![Page 8: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/8.jpg)
Pagina 82010/2011
Esempio
Stringhe
Parte 8
#include <stdio.h>
int main() {
const int N = 25;
char s[N];
s[0] = 'H'; s[1]='e'; s[2]='l';
s[3]='l'; s[4]='o';
s[5]='\0'; // terminatore stringa
printf("%s\n", s);
return 0;
} Nota: utilizzo del formato
%s nella printf per le
stringhe
Questo programma stampaHello
![Page 9: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/9.jpg)
Pagina 92010/2011
Esempio
Stringhe
Parte 8
#include <stdio.h>
int main() {
const int N = 25;
char s[N];
int i;
for(i = 0; i < N; i++)
s[i] = 'a';
s[0] = 'H'; s[1]='e'; s[2]='l';
s[3]='l'; s[4]='o';
// mancato inserimento
// del terminatore stringa
printf("%s\n", s);
return 0;
}
Questo programma stampaHelloaaaaaaaaaaaaaaaaaaaa
![Page 10: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/10.jpg)
Pagina 102010/2011
Esempio
Stringhe
Parte 8
#include <stdio.h>
int main() {
const int N = 25;
char s[N];
int i;
for(i = 0; i < N; i++)
s[i] = 'a';
s[0] = 'H'; s[1]='e'; s[2]='l';
s[3]='l'; s[4]='o';
s[5]='\0'; // terminatore stringa
printf("%s\n", s);
return 0;
}
Questo programma stampaHello
![Page 11: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/11.jpg)
Pagina 112010/2011
Stringhe costanti
Stringhe
Parte 8
![Page 12: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/12.jpg)
Pagina 122010/2011
Stringhe e caratteri
Stringhe
Parte 8
![Page 13: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/13.jpg)
Pagina 132010/2011
Inizializzazione tramite stringa
costante
Stringhe
Parte 8
#include <stdio.h>
int main() {
char str[10] = "some text";
printf("%s\n", str);
return 0;
}
![Page 14: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/14.jpg)
Pagina 142010/2011Stringhe
Parte 8
Inizializzazione tramite stringa
costante
![Page 15: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/15.jpg)
Pagina 152010/2011Stringhe
Parte 8
Inizializzazione tramite stringa
costante
warning: excess elements in
array initializer
![Page 16: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/16.jpg)
Pagina 162010/2011
Esempio
Stringhe
Parte 8
#include <stdio.h>
int main() {
char str[10] = "some text";
printf("%s\n", str);
printf("dimensione di str = %d\n“,
sizeof(str));
char s[] = {'g', 'u', 'a', 'r', 'd', 'a'};
printf("%s\n", s);
printf("dimensione di s = %d\n", sizeof(s));
return 0;
}
![Page 17: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/17.jpg)
Pagina 172010/2011
Possibile output
Stringhe
Parte 8
some text
dimensione di str = 20
guardasome text
dimensione di s = 6
Manca il carattere di
terminazione '\0'
dopo l’ultima 'a' di
“guarda”
![Page 18: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/18.jpg)
Pagina 182010/2011
Modifica esempio
Stringhe
Parte 8
#include <stdio.h>
int main() {
char str[10] = "some text";
printf("%s\n", str);
printf("dimensione di str = %d\n“,
sizeof(str));
char s[] = {'g','u','a','r','d','a','\0'};
printf("%s\n", s);
printf("dimensione di s = %d\n", sizeof(s));
return 0;
}
carattere
speciale
'\0'
![Page 19: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/19.jpg)
Pagina 192010/2011
Output
Stringhe
Parte 8
some text
dimensione di str = 20
guarda
dimensione di s = 7
![Page 20: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/20.jpg)
Pagina 202010/2011
Stringhe e array
Stringhe
Parte 8
![Page 21: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/21.jpg)
Pagina 212010/2011
Lettura e scrittura di stringhe
Stringhe
Parte 8
![Page 22: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/22.jpg)
Pagina 222010/2011
Lettura e scrittura di stringhe
Stringhe
Parte 8
![Page 23: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/23.jpg)
Pagina 232010/2011Stringhe
Parte 8
Lettura e scrittura di stringhe
![Page 24: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/24.jpg)
Pagina 242010/2011
Stringhe e puntatori
Stringhe
Parte 8
![Page 25: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/25.jpg)
Pagina 252010/2011
Dimensione delle stringhe in C
Stringhe
Parte 8
Per le stringhe rappresentate come array di
caratteri, bisogna distinguere tra
la dimensione dell’array (staticamente
determinato alla sua creazione)
la lunghezza della stringa, che può invece
variare a tempo di esecuzione.
![Page 26: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/26.jpg)
Pagina 262010/2011
Dimensione delle stringhe in C
Stringhe
Parte 8
const int N = 256;
char s[N];
s[0]=’H’; s[1]=’e’; s[2]=’l’;
s[3]=’l’; s[4]=’o’;
s[5]=’\0’; // terminatore stringa
La dimensione dell’array è 256
La dimensione della stringa è 5
![Page 27: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/27.jpg)
Pagina 272010/2011
Dimensione delle stringhe in C
Stringhe
Parte 8
La lunghezza (dimensione) della stringa deve
essere sempre minore o uguale della
dimensione dell’array meno uno (perché
bisogna considerare sempre il carattere
terminatore della stringa).
In caso contrario, si ha un accesso fuori dalla
zona di memoria allocata alla stringa con
conseguente possibilità di errori.
![Page 28: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/28.jpg)
Pagina 282010/2011
Dimensione delle stringhe in C
Stringhe
Parte 8
Il calcolo della lunghezza di una stringa, cioè il
conteggio dei caratteri che precedono il
terminatore di stringa, si effettua tramite la funzione strlen (vedi dopo).
Tale funzione è però inefficiente (perché
richiede un ciclo di scansione di tutta la
stringa); quindi, a volte, si preferisce usare un
argomento esplicito che contiene la lunghezza
della stringa.
![Page 29: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/29.jpg)
Pagina 292010/2011
Funzione strlen
Stringhe
Parte 8
size_t strlen( const char *str );
restituisce la lunghezza del parametro str.
E’ una funzione definita in <string.h>
![Page 30: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/30.jpg)
Pagina 302010/2011Stringhe
Parte 8
Esempio strlen
#include <stdio.h>
#include <string.h>
int main() {
char str[100] = "test string";
printf("%d\n", sizeof(str));
printf("%d\n", strlen(str));
return 0;
}
Questo programma stampa
100
11
![Page 31: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/31.jpg)
Pagina 312010/2011Stringhe
Parte 8
Una implementazione di strlen
size_t strlen(const char *str) {
const char* s = str;
for( ; *s; ++s);
return(s – str);
}
Verificare per esercizio
la correttezza di questa
implementazione
![Page 32: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/32.jpg)
Pagina 322010/2011
Esempio: contare le occorrenze di una
lettera in una stringa
Stringhe
Parte 8
Scrivere una funzione che, presi come
parametri una stringa (sotto forma di array di caratteri) ed un carattere c, restituisca il
numero di occorrenze di c nella stringa.
![Page 33: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/33.jpg)
Pagina 332010/2011
Esempio: contare le occorrenze di una
lettera in una stringa
Stringhe
Parte 8
int contaLettera (const char s[], int N, char c) {
int numlettera = 0;
int pos = 0;
while (pos < N) {
if (s[pos] == c)
numlettera++;
pos++;
}
return numlettera;
}
![Page 34: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/34.jpg)
Pagina 342010/2011
Versione con strlen
Stringhe
Parte 8
int contaLettera (const char *s, char c) {
int numlettera = 0;
int pos = 0;
int N = strlen(s);
while (pos < N) {
if (s[pos] == c)
numlettera++;
pos++;
}
return numlettera;
}
![Page 35: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/35.jpg)
Pagina 352010/2011
Main
Stringhe
Parte 8
int main() {
char s[256];
char c;
printf("digitare una parola, poi premere INVIO\n");
scanf("%s", s);
//pulisco il buffer in ingresso
while(c != '\n' && c!= EOF) {
c = getchar();
}
printf("digitare un carattere da cercare, poi premere
INVIO\n");
scanf("%c", &c);
int i = contaLettera(s, c);
printf("il carattere %c si trova %d volte in %s\n",
c, i, s);
return 0;
}
![Page 36: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/36.jpg)
Pagina 362010/2011
Esempio: codifica di una stringa
Stringhe
Parte 8
Scrivere una funzione che, presi come parametri una stringa (sotto forma di array di caratteri) ed un intero d,
restituisca la stringa opportunamente codificata.
La codifica è ottenuta sostituendo ciascun carattere con
il carattere che ha codice pari al codice del carattere da sostituire incrementato di d.
Esempio"ciao" con d=3 diventerà "fldr"
![Page 37: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/37.jpg)
Pagina 372010/2011
Esempio: codifica di una stringa
Stringhe
Parte 8
void codifica(const char *str, char *strRis, int d) {
char c;
int ci;
int N = strlen(str);
int i;
for (i = 0; i < N; i++)
strRis[i] = d + str[i];
strRis[N]=’\0’; // terminatore di stringa
return;
}
![Page 38: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/38.jpg)
Pagina 382010/2011
Note
Stringhe
Parte 8
Nota 1: il primo dei due parametri di tipo array di caratteri ha il ruolo di input, ed è quindi dichiarato const, mentre il secondo ha il ruolo di
output e non può essere dichiarato const in quanto verrà modificato.
Nota 2: nell’istruzione strRis[i] = d + str[i]; c’è una
conversione implicita ad intero per poter effettuare la somma e poi una
conversione di nuovo a carattere per memorizzare il risultato.
Nota 3: in questa funzione si assume che sia stata già allocata memoria per la stringa di output strRis di dimensione almeno pari a
quella di str. Inoltre, è necessario aggiungere il carattere '\0' per
terminare la stringa di output.
![Page 39: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/39.jpg)
Pagina 392010/2011
Esempio: lunghezza della più lunga
sottosequenza
Stringhe
Parte 8
Realizzare una funzione che prenda in ingresso una stringa s (sotto forma di array
di caratteri), che si può supporre essere
costituita dai soli caratteri '0' e '1', e
restituisca la lunghezza della più lunga sottosequenza di s costituita da soli '0' tutti
consecutivi.
![Page 40: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/40.jpg)
Pagina 402010/2011
Esempio: lunghezza della più lunga
sottosequenza
Stringhe
Parte 8
Se la stringa passata come parametro è
"001000111100", allora la più lunga
sottosequenza di soli '0' è quella sottolineata,
che ha lunghezza 3.
![Page 41: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/41.jpg)
Pagina 412010/2011
Sottosequenza
Stringhe
Parte 8
int sottosequenza(const char * s) {
char bit; // l’elemento corrente della sequenza
int cont = 0; // lunghezza attuale della sequenza di zeri
int maxlung = 0; // valore temporaneo della massima lunghezza
int N = strlen(s); // lunghezza della stringa
for (int i = 0; i < N; i++) {
bit = s[i];
if (bit == '0') { // e’ stato letto un altro '0'
cont++; // aggiorna la lunghezza della sequenza
// corrente
if (cont > maxlung) // se necessario, aggiorna
// il massimo temporaneo
maxlung = cont;
} else // e’ stato letto un '1'
cont = 0; // azzera la lunghezza della sequenza
//corrente
}
return maxlung;
}
![Page 42: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/42.jpg)
Pagina 422010/2011
Esercizio
Stringhe
Parte 8
Esercizio 8.1
Scrivere un programma che utilizzi la funzione sottosequenza con input
01000100001110
stampando a video il risultato ottenuto
![Page 43: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/43.jpg)
Pagina 432010/2011
Esercizi
Stringhe
Parte 8
Esercizio 8.2
Scrivere una funzione che, data una stringa, ne
restituisca l’ultimo carattere.
![Page 44: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/...Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Parte 8 Stringhe Domenico](https://reader036.vdocuments.mx/reader036/viewer/2022081621/61267b00a217fb79cc559ce7/html5/thumbnails/44.jpg)
Pagina 442010/2011
Esercizi
Stringhe
Parte 8
Esercizio 8.3
Scrivere un programma che legga da input una linea contenente una
domanda a risposta SI/NO senza simboli di punteggiatura, e stampi
una risposta alla domanda in base alle seguenti regole:
1. se la frase inizia e finisce con una vocale la risposta è "FORSE"
2. se l’ultima lettera della frase è "a", "i", oppure "u", la risposta è "SI“
3. se l’ultima lettera della frase è "e" oppure "o", la risposta è "NO“
4. se l’ultima lettera della frase è un carattere diverso da "a", "e", "i",
"o", "u" , la risposta è "NON SO"
Nota: quando si applicano due regole, la risposta si ottiene facendo la
concatenazione delle risposte.