Vous êtes sur la page 1sur 30

Aula 06:

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.

Na maioria das vezes, a informao precisa ser


representada de forma textual, e, portanto, preciso
tambm aprender a armazenar e tratar a informao
que est contida em palavras e frases.
Mecanismos de busca (Google, Bing!), minerao de
dados, tradutores, etc.

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.

Esse mecanismo, na realidade, pode ser um algoritmo


dos mais complexos, que manipula extensas cadeias de
caracteres comparando com a chave da busca e
tentando encontrar uma relao.
Essas cadeias de caracteres, que podem ser curtas como
um Ol ou longas como um livro do prprio T. S. Eliot,
so chamadas, em programao, de Strings.

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!

Uma string pode incluir letras, dgitos numricos e


caracteres especiais como +, -, *, /, $, &.
Na verdade, uma string pode conter praticamente
qualquer coisa. Sua flexibilidade na descrio da
informao que a torna importante.

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.

A string nome, com o nome prprio Jos Silva


ficaria da seguinte maneira:
0

10

11

12

13

...

47

48

49

\0

...

E poderia ser inicializada de trs modos:

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.

Repare que fazemos referncia apenas ao identificador


da string (user) e no utilizamos colchetes.

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.

Tambm no utilizamos os colchetes no scanf. O nome


da string passado sozinho como parmetro, sem o &.
No entanto, o scanf pode no ser a melhor opo para
a leitura de strings.

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.

Uma alternativa mais eficiente para leitura de uma string


a funo gets(), a qual faz leitura dos dados de entrada
considerando todos os caracteres digitados at que o
usurio pressione a tecla Enter.
Incluindo espaos.

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).

getchar(): Permite ler um nico caractere do teclado.


putchar(): Permite imprimir um nico caractere na
tela.

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:

strlen: serve para obter o tamanho de uma string.


strcpy: realiza uma cpia de uma string
strcmp: compara strings
strcat: concatena strings, ou seja, junta duas strings em
uma s.

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().

strcpy(char *destino, char *origem)

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;

importante lembrar que strcmp() case sensitive. Isso significa que


letras maisculas ou minsculas tornam as strings diferentes.

Strings
Comparando strings| strcmp
Vejamos alguns exemplos:
str1

str2

strcmp(str1, str2)

UNIFEI

UNIFEI

UNIFEI

UNIFAL

BRASIL

MEXICO

-1

Brasil

EUA

-1

joao

Joao

A funo strcmp() compara caractere a caractere, utilizando seus


valores da tabela ASCII. Se no houver diferena, ela retorna 0. Se
encontrar algum caractere diferente, ela retorna 1 se o valor for maior
ou -1 se for menor.
QUASE uma ordem alfabtica. (Quase? Maisculas e Minsculas)

Strings

Comparando strings| strcmp


Na tabela ASCII, os caracteres maisculos (65-90) vem antes dos minsculos (97-122);
Os caracteres numricos vem antes de qualquer letra.
So estes valores que so comparados na funo strcmp().

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

Tente refaz-lo em casa!!

Onde est a sabedoria que perdemos no conhecimento?


onde est o conhecimento que perdemos na informao?
T. S. Eliot

Vous aimerez peut-être aussi