Académique Documents
Professionnel Documents
Culture Documents
Strings e Caracteres
Prof. Luiz Fernando Nunes
luizfernandolfn@unifei.edu.br
Universidade Federal de Itajub
Slides: Prof. Joo Paulo R. R. Leite
Strings
Onde est a sabedoria que perdemos no
conhecimento? Onde est o conhecimento que
perdemos na informao? (T. S. Eliot)
Excesso de informao:
Para se obter conhecimento, precisamos extra-lo da
informao. preciso armazenar, transformar, classificar
e filtrar informaes, para que no se tornem apenas
dados, ou informao intil.
Strings
Todos os mecanismos de busca da internet funcionam
de maneira semelhante: digitamos uma palavra, ou
frase, e, em questo de segundos, recebemos como
resposta uma lista de links com o texto que buscamos.
Como realizado esse processamento?
At agora somente sabemos tratar valores numricos e
caracteres isolados.
Strings
Uma string consiste em uma srie de caracteres
tratados como uma entidade nica.
String, em ingls, significa corda: um cordo que une
algumas coisas.
Em C, uma string ir unir vrios caracteres em uma nica
sequncia, que possui algumas caractersticas especiais e
pode se utilizar de ferramentas prprias.
Srie ordenada de caracteres = array de caracteres. Vetor!
Strings
String o nome que damos para uma sequncia
de caracteres armazenados de maneira
sequencial na memria: vetor de caracteres.
Sua declarao segue as mesmas regras de
declarao de vetores convencionais:
Essa declarao cria uma string de nome str e tamanho
6. No entanto, somente possvel armazenar uma
palavra ou frase de at 5 caracteres.
Em C, as string precisam sempre terminar com o caractere
nulo (\0).
Strings
O caractere nulo necessrio pois podemos definir
uma string maior do que a palavra armazenada.
Imagine que voc precisa de uma varivel para guardar o
nome, que pode ser pequeno como Jos Silva ou grande
como Universidade Federal de Itajub.
necessrio que a String seja declarada com um tamanho
que caiba qualquer tipo de nome.
Ao preencher apenas as 10 primeiras posies do vetor com o
nome Jos Silva, teremos outras 40 posies preenchidas com
dados aleatrios da memria.
Como o programa consegue identificar que a string termina no
Silva e no prossegue com o lixo de memria?
Atravs do caractere nulo, que deve ser colocado aps Jos Silva.
Strings
Portanto, como o caractere \0 indica o final da string,
devemos consider-lo ao declarar seu tamanho.
Uma string de 50 posies somente suportar uma frase
ou palavra de at 49 caracteres.
10
11
12
13
...
47
48
49
\0
...
Strings
Todas as propriedades que aprendemos para
vetores numricos tambm podem ser
aplicadas aos vetores de caracteres.
Por exemplo, podemos acessar individualmente
cada caractere de uma string, tanto para saber seu
valor quanto para modific-lo:
Strings
Podemos utilizar as mesmas funes que j
conhecemos para ler uma string do teclado ou
escrever uma string na tela.
Escrita: printf()
Utilizamos o cdigo %s para identificar uma string.
Strings e Caracteres
O programa abaixo mostra a impresso de uma string completa e a
impresso de alguns de seus caracteres separadamente. Repare na
diferena:
Strings
Leitura: scanf()
Tambm utilizamos o cdigo %s para identificar
uma string.
Strings
A funo scanf() l apenas strings digitadas sem espaos,
ou seja, l apenas palavras.
Caso o usurio digite uma frase, ou um nome composto, apenas
a poro anterior ao primeiro espao ser armazenada.
Strings
gets()
stdio.h
scanf()
stdio.h
Strings
Existem ainda algumas outras funes de entrada e
sada de strings e caracteres definidas em stdio.h:
puts(): Imprime uma nica string na tela, seguida de um
caractere de fim de linha (\n).
Hands-On!
Escreva um programa simples, que receba uma string e a exiba na tela:
Hands-On!
Escreva um programa que receba uma string e escreva na tela
quantos caracteres a compem, sem utilizar nenhuma funo
auxiliar pr-definida.
Hands-On!
Escreva um programa que receba uma string, e imprima o seu inverso na tela.
Strings
Repare como seria interessante, nos dois problemas
anteriores, que, por exemplo, houvesse alguma funo
pr-definida que nos retornasse o tamanho da string
digitada.
Existe uma srie de funes pr-definidas na biblioteca
padro da linguagem C para o tratamento de strings.
Elas esto definidas na biblioteca <string.h>.
As mais utilizadas so:
Strings
Tamanho de uma string | strlen
Para se obter o tamanho de uma string (inteiro), utilizamos
a funo strlen(). A funo ir retornar sempre a
quantidade de caracteres que antecedem o caractere \0.
O programa anterior ficaria da seguinte maneira:
Strings
Copiando uma string | strcpy
Uma string um array de caracteres, e sabemos que a
linguagem C no suporta a atribuio de um vetor para outro.
Por este motivo, a nica maneira de atribuir o contedo de uma
string para a outra a cpia, elemento por elemento, de uma
string para outra.
A linguagem C possui uma funo que realiza esta cpia:
strcpy().
Hands-On!
Vamos escrever um programa que faa a cpia de duas strings
elemento a elemento
Strings
Copiando uma string | strcpy
Agora, vejamos como ficaria o cdigo apenas utilizando a funo strcpy.
O primeiro parmetro sempre a string de destino, e o segundo, a string de
origem. Cerifique-se de que a string de destino possui tamanho suficiente
para comportar a string de origem.
Strings
Concatenando uma string| strcat
A concatenao consiste em copiar uma string para o final
de outra, unindo as duas em uma nica string.
uma operao bastante frequente quando estamos
lidando com processamento de informao textual.
O C possui uma funo que realiza esta tarefa, a strcat():
strcat(char *destino, char *origem)
Hands-On!
Vamos escrever um programa que faa a concatenao de
duas strings sem utilizar a funo strcat.
Strings
Concatenando uma string| strcat
Agora, vejamos como ficaria o cdigo apenas utilizando a funo strcat.
Neste caso, a string destino precisa ter tamanho suficiente para conter a
sequencia formada pela unio das strings destino e origem.
Strings
Comparando strings| strcmp
Da mesma maneira como o operador de atribuio no funciona
corretamente para strings, o mesmo ocorre com operadores
relacionais.
Se temos duas strings str1 e str2, no possvel compar-las das
seguintes maneiras:
str1 == str2 | str1 != str2 | str1 > str2 | str1 < str2
preciso utilizar a funo strcmp(), que retorna:
Zero, se as strings forem iguais;
Um valor maior que zero, se str1 for alfabeticamente maior que str2;
Um valor menor que zero, se str1 for alfabeticamente menor que str1;
Strings
Comparando strings| strcmp
Vejamos alguns exemplos:
str1
str2
strcmp(str1, str2)
UNIFEI
UNIFEI
UNIFEI
UNIFAL
BRASIL
MEXICO
-1
Brasil
EUA
-1
joao
Joao
Strings
Hands-On!
Como ficaria, ento, um programa que compara strings?
O que aconteceria se eu comparasse duas strings com o operador ==?
Hands-On!
Escreva um programa em C que verifique se uma dada palavra um
palndromo. Exemplos.: ovo, arara, asa, osso, somamos, etc.
Hands-On!
Faa um programa que leia duas strings e as imprima em ordem
alfabtica, ou seja, a ordem em que apareceriam em um dicionrio.
Hands-On!
O cdigo de Csar uma das tcnicas de criptografia mais simples e
conhecidas. um tipo de codificao na qual cada letra do texto
substituda por outra, que se apresenta n posies aps ela no
alfabeto. Por exemplo, com uma troca de trs posies, a letra A
seria substituda por D, B se tornaria E, e assim por diante.
Escreva um programa que faa uso deste cdigo de Csar para trs
posies. Entre com uma string e imprima a string codificada.
Exemplo:
String: a ligeira raposa marrom saltou sobre o cachorro cansado
Nova String: d oljhlud udsrvd pduurd vdowrx vreuh r fdfkruur fdqvdgr