• Non ci sono risultati.

Il tipo stringa di caratteri

N/A
N/A
Protected

Academic year: 2021

Condividi "Il tipo stringa di caratteri"

Copied!
7
0
0

Testo completo

(1)

28

Il tipo stringa di caratteri

• Una stringa di caratteri è una sequenza di caratteri ASCII, atti a rappresentare una parola, una frase, un testo

• E’ un tipo strutturato costruito con l’operatore sequenza

• Una delle operazioni tipiche sulle stringhe di caratteri è la concatenazione di due o più stringhe.

Es.

A=“calcolatore “ B=“elettronico”

C=A//B=“calcolatore elettronico”

Il tipo stringa di caratteri in C

• In C una stringa di caratteri è un array monodimensionale di caratteri ASCII terminante con il carattere null ‘\0’

• Ad esempio

“Questa è una stringa”

è un array di 21 caratteri.

L’array è quindi il seguente:

elemento zero ‘Q’

primo elemento ‘u’

secondo elemento ‘e’

...

ventesimo elemento ‘a’

ventunesimo elemento ‘\0’

La dichiarazione di una variabile di tipo stringa è uguale a quella di un array monodimensionale :

(2)

30

Funzioni per la manipolazione di stringhe

• Le funzioni di manipolazione di stringhe sono : – strcat(strg1,strg2) concatenazione di stringhe – strcmp(strg1,strg2) confronto fra due stringhe – strcpy(strg1,strg2) copia di una stringa in un’altra – strlen(strg1) lunghezza di una stringa

• Dette funzioni fanno parte della libreria standard string.h

• Esistono altre funzioni di manipolazione di stringhe, ma queste sono le più usate in ambiente C.

31

Esempio

#include <stdio.h>

#include <string.h> //libreria standard contenente funzioni sul tipo stringa

main ()

{const char a[]=", Evviva";

char c[200],b[20];

printf("Immetti stringa b \n");

scanf("%s%",&b);

printf("Immetti stringa c \n");

scanf("%s%",&c);

strcat(b,c); //concatena le stringhe c e b e mette la nuova stringa in b printf("C = %s \n",b);

strcat(c,a); //concatena le stringhe c e b e mette la nuova stringa in c printf("C = %s \n",c);

}

(3)

32

/* Stampa i caratteri e la codifica ASCII */

main() {

char stringa[] = “Questa è una stringa”;

int i = 0;

while ( stringa[i] != ‘\0’ ) {

printf ( “%c = %d\n”,stringa[i], stringa[i] );

++i;

} }

Esempio

Q = 81 u = 117 e = 101 s = 115 t = 116 a = 97

= 32 . . .

g = 103 a = 97

Output del programma

Codice ASCII (in decimale)

(4)

34

… l’istruzione per l’input formattato scanf(….) non

consente di immettere spazi, ovvero legge tutti i caratteri consecutivi immessi fino al primo carattere spazio

se all’esecuzione dell’istruzione scanf("%s%",&b);

viene immessa la stringa:

CORSO DI INFORMATICA

la variabile b conterrebbe solo la stringa “CORSO”

tutti gli altri caratteri dopo lo spazio non sono considerati

… uso della funzione di input getchar()

… un approfondimento ...

35

/* Legge e stampa una stringa di max 100 caratteri*/

#include <stdio.h>

main()

{char c, linea[100];

int i ; i=0;

printf("Immetti stringa \n");

c=getchar(); /* funzione getchar() per input da tastiera, */

/* legge un solo carattere */

while ( i<100 && (c != ‘\n’)) /* ciclo per la lettura dei */

{ linea[i] = c; /* caratteri della stringa */

c=getchar(); /* nello array linea[] */

i++;

}

(5)

36

// aggiunge carattere di fine stringa linea[i++] = ‘\0’;

i = 0;

// Stampa stringa immessa printf(" Stringa Immessa \n");

while ( linea[i] != ‘\0’) { printf(“%c” , linea[i]);

i++;

} }

Definizione del problema: Calcolare l’occorrenza di ciascun carattere alfabetico minuscolo in una frase

Definizione dei dati del problema:

I: la frase, ovvero l’array che la contiene

Pi: i caratteri della frase devono essere tutti minuscoli U: per ciascun carattere minuscolo componente la frase il numero di volte che esso compare nella frase

Pu: nessuna

Esempio

(6)

38

Descrizione del metodo di elaborazione:

Si considera un array monodimensionale di nome count[] di cardinalità 26, pari al numero delle lettere minuscole: ciascun elemento dell’array corrisponde ad una lettera secondo l’ordine alfabetico (primo elemento lettera ‘a’, ultimo elemento lettera ‘z’).

Si scandisce la frase e ad ogni occorrenza di ciascun carattere minuscolo si incrementa di 1 il corrispondente elemento dell’array count[].

La corrispondenza tra i caratteri minuscoli e le posizioni dell’array è fatta sulla base del codice ASCII dei caratteri: basterà sottrarre al codice ASCII di ciascun carattere il valore 97 (codice ASCII di

‘a’).

Si stampa il contenuto di count[].

39

Esempio

Nome variabile Descrizione Tipo

frase array monomensionale di char CHAR

Nome variabile Descrizione Tipo

count array con le occorrenze di ogni carattere INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

i, j indici INT

ch singolo carattere della frase CHAR

Tabella delle variabili di algoritmo

(7)

40

/* Calcola la frequenza dei caratteri in una frase*/

#include <stdio.h>

main()

{char ch, frase[]=“questa frase contiene molti caratteri”;

int count[26] , j,i ;

for (j=0; j<26;j++) count[j]=0; // azzera elementi di count[]

i=0;

while (frase[i]!=‘\0’)

{ if ((frase[i]>=‘a’) && (frase[i]<=‘z’) {ch=frase[i];

/* incrementa di 1 il valore dell’elemento di count corrispondente al carattere ch in frase */

count[ch - ‘a’]+ +; } i++;}

for (j=0; j<26;j++) printf(“%c %10i \n”, ‘a’+j, count[j]);

}

Riferimenti

Documenti correlati

● Se gli estremi degli scaglioni e/o le percentuali cambiano, devo cambiare solo l'array e non il programma che fa la ricerca!.. Algoritmi su

Tra parentesi tonde sono state inserite le lettere mancanti delle parole abbreviate e il cambiamento di cartella e di pagina.. Le parole risultanti dall’unione di due o più

Quindi main individua, chiamando un’altra funzione, la colonna di A avente il massimo numero di elementi dispari (se ce ne sono più di una, si prende la prima incontrata)..

¨  L’espressione a[i] restituisce il valore della variabile con indice i, quindi il tipo di questa espressione è il tipo base dell'array. Accesso agli elementi di

codice strumento prezzo FLT flauto 2500 VLN violino 8000. $inv_art

cost = 20; // estero ancora più

cost = 10; // Hawaii più costoso else // NON FUNZIONA. cost = 20; // estero ancora

cost = 20; // estero ancora più