Tratamento de Strings

Fazer download em ppt, pdf ou txt
Fazer download em ppt, pdf ou txt
Você está na página 1de 11

Tratamento de strings

Reviso
Conceito de strings
Na linguagem C uma string corresponde a uma
vetor do tipo char que armazena um texto
terminado pelo caractere(\0)
Ou seja, uma string uma cadeia de
caracteres (bytes) alocados de forma sequencial
e contgua. Cada caractere um elemento
independente que pode ser acessado por meio
de um ndice.
O tamanho fsico de uma string dado pelo
nmero de caracteres que ela comporta mais 1
(que ocupado pelo delimitador \0)
Exemplos de strings
A declarao abaixo refere-se a um vetor de nome
faculdade de no mximo 19 caracteres (porque deve
haver espao para o delimitador)

char faculdade[20]=FATEC SO CAETANO;

Neste caso os 20 bytes so alocados, mas se


observarmos bem, apenas 18 bytes so usados e 17
correspondem efetivamente ao seu contedo
Exemplos de strings (cont)
Se modificarmos a declarao anterior como se segue:

char faculdade[]=FATEC SO CAETANO;

O vetor faculdade teria 18 caracteres, que o espao


necessrio e suficiente para acomodar a string entre aspas.
Quando o contedo inicial de um vetor vai ser estabelecido
imediatamente aps a sua declarao, no necessrio, a
menos que se deseje, fornecer o tamanho.
O compilador capaz de calcular e reservar o espao
necessrio.
Exemplos de strings (cont)
Conforme dissemos uma string corresponde a um
vetor de caracteres que podem ser acessados
individualmente, ento a declarao a seguir tambm
vlida:

char fruta[]={A,M,O,R,A,\0};
que equivale declarao:
char fruta[]=AMORA;// aqui o delimitador implcito

Qual o tamanho do vetor nos 2 casos?


Funes para leitura
Considerando a declarao:
char aluno[21];
Temos:
scanf( %s, aluno); //l uma string e armazena o seu contedo no endereo
dado pela varivel aluno (Note que a palavra aluno j um endereo por se
tratar do nome de um vetor, sendo desnecessrio o uso do &)
o inconveniente deste comando que a leitura termina quando um enter ou um
espao em branco encontrado, o que restringe
bastante o seu uso (para leitura de frases ou nomes compostos).

gets(aluno); //obtm uma string e armazena o seu contedo na varivel aluno.


O comando gets permite a leitura de frases ou nomes compostos, o que oferece
vantagem sobre a forma anterior do scanf()

PROBLEMA: ambas as construes acima permitem a leitura de mais


de 21 caracteres (que o tamanho definido para a varivel),
podendo ocorrer erro de execuo por invaso de reas de
memria alm daquela previamente reservada.
Funes para leitura (cont)
Sugesto:
Para resolver os problemas mencionados no slide
anterior podemos usar a seguinte sintaxe:
char aluno[21];
...
scanf( %20[^\n], aluno);
Por mais estranho que possa parecer, este comando pede
para que seja procurado no buffer de teclado (sim, porque
scanf() procura informaes a) e transferido para o endereo
aluno qualquer caractere diferente (^) de enter (\n), e
impondo ainda um limite de at 20 bytes para a transferncia.
NOTA: O espao em branco antes da % indica que brancos e
caracteres de tabulao sejam desprezados antes do inicio do
texto.
Funes de manipulao de strings
A linguagem C oferece diversas funes (disponveis
na biblioteca string.h) para o tratamento de strings:
So:
strlen(<str>); //retorna o tamanho da str
strcpy(<str1>,<str2>); //copia str2 em str1
strcat (<str1>,<str2>);// concatena str2 em str1
strcmp(<str1>,<str2>);// compara str1 com str2
// se (str1=str2) retorna zero
// se(str1<str2) retorna negativo
//se (str1>str2) retorna positivo
e outras....
Funes de manipulao de strings
Vale lembrar, que em C, as strings merecem ateno
especial.
Por exemplo, ddos:
char s1[10], s2[10];
//todos os comandos abaixo so invlidos
s1=alfa; //atribuio
s2=s1;//atribuio
if (s1==s2) printf(iguais);//comparao

O correto seria:
strcpy(s1,alfa); // copia a palavra alfa para a string s1
strcpy(s2,s1); // copia a string s1 para a string s2
if(strcmp(s1,s2)==0) printf(iguais); //compara se as
strings tem contedos iguais
Funes de manipulao de strings
- caractere a caractere
O que faz a funo abaixo?

int tam (char *s){


int n=0;
for(int i=0; s[i]!=\0; i++)
n++;
return n;
}
Funes de manipulao de strings
- caractere a caractere
O que faz a funo abaixo?

void grud (char *dest, char *orig){


int i;
for(i=0; orig[i]!= \0 ; i++)
dest[i]=orig[i];
dest[i]=\0;
}

Você também pode gostar