Example: confidence

Linguaggio C: Stringhe

Macroareadi IngegneriaDipartimento di Ingegneria Civile e Ingegneria InformaticaLinguaggio C: StringheValeria CardelliniCorsodi 2019/20 ArgomentiqDichiarazione di stringheqInizializzazione e manipolazione di stringheqFunzioni di libreria per stringheValeria Cardellini -CE 2019/201 Stringhe in CqUna stringa un vettore di caratteriqContiene la sequenza di caratteri che forma la stringa, seguita dal carattere speciale di fine stringa: '\0'qEsempio:charstr[10] = {'p', 'r', 'o', 'v', 'a', '\0'};qEsempio: il seguente vettore di caratteri non una stringa perch non termina con '\0'charnon_str[2] = {'p', 'r'};Valeria Cardellini -CE 2019/202 Inizializzazione di stringheqUna stringa pu essere inizializzata anche utilizzando una stringa letteralecharstr2[] = "prova";oppurecharstr2[6] = "prova"; In questi esempi l array di caratteri allocato staticamenteqE possibile memorizzare una stringa in un array di caratteri allocato dinamicamente Esempio: char*buffer = ma

Vengono stampati tutti i caratteri fino al primo '\0' escluso Valeria Cardellini -CE 2019/20 6 Input/output di stringhe q Per leggere una stringa si utilizza la specifica di formato %s q Esempio char buffer[40]; scanf("%s", buffer); Vengono letti da input i caratteri in sequenza fino al primo carattere di spaziatura (spazio, tabulazione,

Tags:

  Linguaggio, Stampati, Linguaggio c, Stringhe

Information

Domain:

Source:

Link to this page:

Please notify us if you found a problem with this document:

Other abuse

Advertisement

Transcription of Linguaggio C: Stringhe

1 Macroareadi IngegneriaDipartimento di Ingegneria Civile e Ingegneria InformaticaLinguaggio C: StringheValeria CardelliniCorsodi 2019/20 ArgomentiqDichiarazione di stringheqInizializzazione e manipolazione di stringheqFunzioni di libreria per stringheValeria Cardellini -CE 2019/201 Stringhe in CqUna stringa un vettore di caratteriqContiene la sequenza di caratteri che forma la stringa, seguita dal carattere speciale di fine stringa: '\0'qEsempio:charstr[10] = {'p', 'r', 'o', 'v', 'a', '\0'};qEsempio: il seguente vettore di caratteri non una stringa perch non termina con '\0'charnon_str[2] = {'p', 'r'};Valeria Cardellini -CE 2019/202 Inizializzazione di stringheqUna stringa pu essere inizializzata anche utilizzando una stringa letteralecharstr2[] = "prova";oppurecharstr2[6] = "prova"; In questi esempi l array di caratteri allocato staticamenteqE possibile memorizzare una stringa in un array di caratteri allocato dinamicamente Esempio: char*buffer = malloc(20*sizeof(char)).

2 In questo caso (come per tutti gli array allocati dinamicamente) non si pu inizializzare l'array contestualmente alla sua creazioneValeria Cardellini -CE 2019/203 Inizializzazione di stringheqAd una stringa si pu anche assegnare una stringa letteralechar*buffer2;buffer2 = "prova"; Si assegna a buffer2, di tipo char*, la stringa costante "prova", di tipo char*costanteqL'istruzione buffer2[0] = 't';non genera errore di compilazione, tuttavia causa un errore in esecuzione poich si sta cercando di cambiare un carattere dichiarato costanteValeria Cardellini -CE 2019/204 Codice sorgente: di stringheqInizializzazione di un vettore di Stringhe ( un array di puntatori a char)qEsempiochar*colori[4] = {"rosso", "giallo", "verde", "blu"}; E un vettore di quattro puntatori a quattro Stringhe costanti E equivalente ad inizializzare i quattro puntatori separatamente:char*colori[4];colori[0] = "rosso"; colori[1] = "giallo";colori[2] = "verde"; colori[3] = "blu".

3 Valeria Cardellini -CE 2019/205 Input/output di stringheqPer stampare una stringa si deve utilizzare la specifica di formato %s Esempioprintf("%s\n", stringa1); Vengono stampati tutti i caratteri fino al primo '\0'esclusoValeria Cardellini -CE 2019/206 Input/output di stringheqPer leggere una stringa si utilizza la specifica di formato %sqEsempiocharbuffer[40];scanf("%s", buffer); Vengono letti da input i caratteri in sequenza fino al primo carattere di spaziatura (spazio, tabulazione, interlinea, ecc.) I caratteri letti vengono memorizzati nell array buffer, terminati dal carattere '\0'qOsservazioni: L array deve essere sufficientemente grande da contenere tutti i caratteri letti Non si usa &buffer ma direttamente buffer(perch buffer gi un indirizzo)Valeria Cardellini -CE 2019/207 Manipolazione di stringheqPer manipolare una stringa si deve accedere ai singoli caratteriqEsempiofor (i = 0; buffer[i] !)

4 = '\0'; i++) printf("%c\n", buffer[i]);qEsempio: Confronto di uguaglianza tra due Stringhe Non si pu usare str1==str2 perch cos si confrontano i puntatori e non le Stringhe E necessario scandire le due Stringhe e confrontare i singoli caratteri Nella standard libraryfunzione strcmp()Valeria Cardellini -CE 2019/208 Esempio: manipolazionedi stringheqConfrontotra2 stringheintstringcmp1(char * str1, char *str2) {inti = 0;while (str1[i] == str2[i] && str1[i] != '\0' && str2[i] != '\0') {i++; }returnstr1[i] == '\0' && str2[i] == '\0'; // 1 se uguali, 0 altr.}intstringcmp2(char* str1, char* str2) {while (*str1 == *str2 && *str1 != '\0' && *str2 !}

5 = '\0') {str1++;str2++;} return*str1 == '\0' && *str2 == '\0';}Valeria Cardellini -CE 2019/209 Codice sorgente: e caratteriqCaratteri e Stringhe sono diversi e non vanno confusi: un carattere in realt un intero una stringa un vettore di caratteri che termina con il carattere '\0' una variabile di tipo stringa in realt un puntatore al primo carattere del vettoreqEsempiocharc = 'a'; // caratterechar*s= "a"; // puntatore a stringa costante "a"charv[] = "a"; /* vettore di 2 charinizializzato a{'a', '\0'} */printf("%lu%lu%lu\n", sizeof(c), sizeof(s), sizeof(v)); Stampa: 1 8 2 Valeria Cardellini -CE 2019/2010 Funzioni di libreria per l'input/outputdi Stringhe e caratteriqE necessario #include < >qInput e output di caratteriintgetchar(void); Legge il prossimo carattere da standard input e lo restituisceintputchar(intc); Invia callo standard output Restituisce EOFse si verifica un erroreValeria Cardellini -CE 2019/2011 Funzioni di libreria per l'input/outputdi Stringhe e caratteriqInput e output di stringhechar*gets(char*str).

6 Legge i caratteri da standard input e li inserisce in str La lettura termina con '\n'o EOF, che non viene inserito in str La stringa viene terminata con '\0' Attenzione: non c alcun modo di limitare la lunghezza della sequenza immessa, lo spazio allocato potrebbe non bastare (buffer overflow); l uso di gets sconsigliatointputs(constchar*str); Manda la stringa strin standard output inserendo '\n'alla fineValeria Cardellini -CE 2019/2012 Funzioni di libreria per l'input/outputdi Stringhe e caratteriqInput e output di stringheda/sustringheintsprintf(char *str, constchar *format, ..); Come printfma scrivein strintsscanf(char *str, constchar *format.)

7 ; Come scanfma leggeda strValeria Cardellini -CE 2019/2013 Funzioni di libreria per la manipolazione di stringheqE necessario #include < >qFunzioni di copiachar*strcpy(char*dest, constchar*src); Copia la stringa srcnel vettore dest Restituisce il valore di dest destdovrebbe essere sufficientemente grande da contenere src Se srce destsi sovrappongono, il comportamento di strcpy indefinitoqEsempiochara[10], b[10];char*x = "Hello", *y = "world";strcpy(a, x); strcpy(b, y);puts(a); puts(b);Valeria Cardellini -CE 2019/2014 Funzioni di libreria per la manipolazione di stringhechar*strncpy(char*dest, constchar*src, size_tn); Copia massimo ncaratteri della stringa srcnel vettore dest size_t il tipo del valore restituito da sizeof Restituisce il valore di dest Attenzione: il carattere '\0'finale di srcviene copiato solo se n della lunghezza di src+1 Valeria Cardellini -CE 2019/2015 Funzioni di libreria per la manipolazione di stringheqFunzionidi concatenazionechar*strcat(char*dest, constchar*src).

8 Concatena la stringasrca quella nel vettore dest(il primo carattere di srcsi sostituisce a '\0'di dest) e termina destcon '\0' Restituisce il valore di dest destdovrebbe essere sufficientemente grande da contenere tutti i caratteri di dest, srce '\0'finale Se srce destsi sovrappongono, il comportamento di strcat indefinitochar *strncat(char *dest, constchar *src, size_tn); Per concatenareal pi ncaratteridi srca destValeria Cardellini -CE 2019/2016 Funzioni di libreria per il confronto di stringheqFunzioni di confrontointstrcmp(constchar*s1, constchar*s2); Confronta le Stringhe s1ed s2 Restituisce: 0 se s1 = s2 un valore < 0 se s1< s2 un valore > 0 se s1 >s2 Confronto di tipo lessicografico: caratteri confrontati uno ad uno ed il primo carattere diverso (o la fine di una delle due Stringhe ) determina il risultatointstrncmp(constchar*s1, constchar*s2, size_tn); Confronta al pi ncaratteri di s1ed s2 Valeria Cardellini -CE 2019/2017 Funzioni di libreria per la ricerca di stringheqFunzionidi ricercachar*strstr(constchar*s1, constchar*s2); Individua la prima occorrenza di s2in s1 Se trova la stringa, restituisce un puntatore alla posizione di s2nella stringa s1.

9 Altrimenti NULLV aleria Cardellini -CE 2019/2018 Funzioni di libreria per la conversionedi stringheqE necessario #include < >qConvertono le strigheformate da cifre in valori interi ed in virgola atoi, atol, atofintatoi(constchar*str); Esempio:intn= atoi("123");Valeria Cardellini -CE 2019/2019 Esempio: sottostringaqDeterminare se una stringa contenuta in un altra e quante volteintsubstring(char*substr, char*str, int*n) {inti = 0, j, continua;*n= 0;while(str[i] != '\0') {continua = 1;j= 0;while(substr[j] != '\0' && str[j+i] != '\0' && continua) {if(substr[j] != str[j+i]) continua = 0;j++;}if(continua && substr[j] == '\0') (*n)++;i++;}return*n> 0;}Valeria Cardellini -CE 2019/2020 Codice sorgente: : sottostringaqDeterminare se una stringa contenuta in un altra e quante volte usando la funzione strstr()intsubstring2(char *substr, char *str, int*n) {intlen;char *s;*n = 0;len= strlen(substr); /* lunghezzadellasottostringa*/if (len> 0) {s = str;while ( (s = strstr(s, substr)) !)}}

10 = NULL ) {(*n)++;s += len; }}return *n > 0;}Valeria Cardellini-CE 2019/2021 Codice sorgente.


Related search queries