![]() |
Mòdul
6
![]() |
Fonaments de
Programació. Llenguatge C/C++![]() |
Pràctica
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
Pràctica
d'ampliació ![]() |
Resum Teòric
Cadenes de caràcters Una cadena de caràcters és un vector de dades del tipus char que acaba en un caràcter NULL ('\0'). Per aquesta raó cal declarar vectors de caràcter amb un caràcter més que la cadena més llarga que volem emmagatzemar. Per exemple, si volem un vector que emmagatzemi el missatge Això és una cadena, haurem de declarar un vector de la següent forma char str[19]
Valor inicial d'una cadena de caràcters Podem posar valors inicials a una cadena de caràcters de dues formes diferents. a) De la forma estàndard dels vectors, tal i com s'ha vist en el mòdul anterior. Cada caràcter va tancat entre cometes senzilles i els caràcters separats per cometes.
b) De la forma abreviada:
En aquesta forma, tots els caràcters s'escriuen junts, tancats per dobles cometes i sense posar el caràcter '\'0' de fi de cadena que es posa automàticament. En qualsevol de les dues formes es pot ometre la dimensió, és a dir, és vàlid tant:
com:
En els dos casos, el compilador de C crearà automàticament un vector de cinc elements de caràcters.
Funcions de cadena. Entrada i sortida La introducció d’una cadena en un programa té dues fases. La primera prepara l’espai de memòria suficient per al seu emmagatzematge, això s'aconsegueix amb la seva declaració. La segona fase consisteix en usar una funció per a capturar la cadena. Per a capturar cadenes directament del teclat es pot fer servir tres funcions la declaració de les quals estan a l'arxiu estàndard stdio.h. Una d'aquestes funcions ja s'ha vist amb anterioritat, es tracta de la funció scanf(). Unes altres funcions que es fan servir per omplir cadenes són gets() i fgets(). La funció gets() té el següent prototipus: char *gets( char *var ); Aquesta funció rep caràcters de l'entrada estàndard (el teclat) i assigna els caràcters al vector de caràcters var[]. Quan es prem la tecla INTRO al finalitzar la cadena, s'envia un caràcter de nova línia que és traduït per aquesta funció per un caràcter nul de fi de cadena. És important remarcar que aquesta funció no fa comprovació que la cadena llegida tingui una mida igual o inferior a la mida reservada per emmagatzemar la variable. Una altra funció semblant que permet aquesta comprovació és la funció fgets(). La funció fgets(), té el següent protitipus: char *fgets( char *var, int n, FILE *flux ); Quan s'utilitza aquesta funció per llegir cadenes del teclat, el tercer argument serà stdin, que correspon a l'entrada estàndard. A l'últim mòdul es tractarà amb més detall les entrades i sortides. Aquesta última funció té l'avantatge que es pot garantitzar un nombre màxim de caràcters. La lectura es realitza fins que es troba un caràcter de nova línia (amb INTRO) o bé fins que es llegeixen n -1 caràcters (incloent-hi el caràcter de nova línia). La funció gets() reemplaça el caràcter de nova línia llegit pel teclat pel caràcter NULL ('\0'), en canvi la funció fgets() afegeix al caràcter de nova línia el caràcter NULL ('\0'). Les dues funcions retornen un punter a la cadena llegida o escrita, o bé el punter NULL si hi ha hagut un error. Per tal de mostrar el contingut d'una cadena pel teclat es fan servir les tres funcions associades respectivament a scanf(), gets() i fgets(), es tracta de: printf(), puts(), i fputs(). La primera d'elles ja s'ha vist amb anterioritat. La funció puts() escriu el contingut del seu argument per pantalla reemplaçant el caràcter NULL pel caràcter de nova línia, en canvi, la funció fputs() no fa cap reemplaçament. Els prototipus d'aquestes dues funcions són: int puts( const char *cadena ); int fputs( const char *cadena, FILE *flux ); En el cas de la funció fputs(), si la sortida és la sortida estàndard, es reemplaça el tercer argument per stdout. Altres funcions de tractament de cadenes Les funcions estàndards més importants que permeten treballar amb cadenes de caràcters i que estan definides a l'arxiu string.h són les que a continuació descriurem:
A més d'aquestes funcions, n'hi ha altres que poden ser útils per al tractament de cadenes. Les declaracions d'aquestes funcions estan al fitxer capçalera ctype.h:
|
|||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |