Anda di halaman 1dari 29

Computao

Eletrnica

Aula 07 - Strings

Prof.: Hansenclever de Frana Bassani (Hans)
h8@cin.ufpe.br
Site da disciplina: www.cin.ufpe.br/~h8/ce

CIn.ufpe.br
Roteiro
Hoje aprenderemos a manipular vetores de caracteres
(Strings) em C:
Caracteres em C
Entrada/Sada de caracteres
Funes que manipulam caracteres
Vetores de caracteres (Strings)
Inicializao
Strings constantes
Entrada/Sada de Strings
Funes de Manipulao de Strings

CIn.ufpe.br
Caracteres
Em C, o Ppo char:
usado para representar caracteres
Literais so dados
pode armazenar valores inteiros (em 1 byte), armazenados no prprio
representando assim, 256 valores disPntos cdigo do programa.
Um literal char escrito entre aspas simples: Podem ser de quaisquer
Ppos de dados bsicos. Ex.:
int: 10, 20, 30...
oat: 2.1, 5.4, 3.2...
char: a, A, \n, \0...
char[]: teste, casa...

CIn.ufpe.br
Caracteres
So representados internamente na memria do
computador por cdigos numricos;

A correspondncia entre os caracteres e os seus


cdigos numricos feita pela tabela ASCII
Na tabela ASCII:
os dgitos so codicados em sequencia
as letras minsculas e maisculas tambm
formam dois grupos sequenciais
CIn.ufpe.br
Tabela ASCII do 30 ao 126

Caracteres de controle
000 \0 (m de string)
Observe que as letras maisculas (65-90),
009 \t (tabulao)
minsculas (97-122) e os dgitos (48-57) esto
dispostos em sequncia! 010 \n (m de linha)
013 \r (retorno de linha)
CIn.ufpe.br
Caracteres
Pode-se Prar proveito da codicao sequencial da
tabela ASCII para escrever programas que idenPcam
o Ppo de caractere.
A funo abaixo verica se um dado caractere um
dgito entre 0 e 9 :

CIn.ufpe.br
Caracteres
Funo para converter uma letra em maiscula:

Testa se minscula

A diferena entre qualquer caractere minsculo e seu


respecPvo maisculo a mesma da letra a minscula
para a letra A maiscula.

CIn.ufpe.br
Caracteres
Podem ser impressos de duas formas diferentes
usando o prinu (%d:como nmero, %c: como
caractere):

Sada: Sada:
97 a 97 a

Existe a funo putchar da biblioteca stdio.h que


permite a impresso de um nico caractere:
Sada:
a

CIn.ufpe.br
Caracteres
Leitura de caracteres com a funo scanf
Este espao diz ao scanf para
ou ignorar espaos, tabulaes,
ou outros caracteres de
controle que estejam no
buer do teclado

Existe ainda a funo getchar da biblioteca stdio.h que
permite a leitura de um caractere

CIn.ufpe.br
Caracteres
As funes scanf e getchar obrigam que a tecla enter
\n seja pressionada aps a entrada dos dados.
Existem funes para ler dados sem esperar pelo enter
em C para ambientes Windows:
Funo getche denida em conio.h:

L um caractere e o exibe na tela

Funo getch denida em conio.h:

L um caractere e no exibe na tela

CIn.ufpe.br
Strings: vetores de caracteres
Strings so representadas por um vetor do Ppo char e
terminadas pelo caractere nulo: \0 ;
O especicador de formato %s da funo prinu
permite imprimir uma cadeia de caracteres;
Muitas funes que manipulam strings o fazem
caractere a caractere, a parPr do endereo do
primeiro at que \0 seja encontrado.
O idenPcador
cidade (sem colchetes)
referencia o endereo do
primeiro caractere da
string.

CIn.ufpe.br
Inicializao de Strings
Inicializao do vetor de caracteres na declarao:

Inicializao do vetor na declarao atravs da escrita dos


caracteres entre aspas duplas:
O caractere nulo
representado
implicitamente e o vetor
declarado com
tamanho 4

CIn.ufpe.br
Declarao de Strings
Inicializao do vetor de caracteres na declarao:

Representa um vetor
com 15 elementos

Representa um vetor de no
mximo, 80 caracteres vlidos

Representa um vetor de no mximo


80 caracteres vlidos, mas com um
valor j inicializado

CIn.ufpe.br
Literais do Lpo String
Um literal (tambm chamado de constante) do Ppo
string deve ser declarado entre aspas duplas. Ex:

Para cada literal presente no cdigo, criada e


inicializada uma regio de memria que cabe todos os
caracteres e o \0:

Endereo: 100 101 102 103 104 105 106


Dados: R e c i f e \0

CIn.ufpe.br
Literais do Lpo String
A atribuio de literais para strings no permiPda:

A no ser na declarao:

Ou pode ser uPlizada a funo strcpy em string.h

CIn.ufpe.br
Leitura de Strings
Para a leitura de strings do teclado, pode ser uPlizada
a funo scanf com o especicador %s.

scanf precisa do endereo de memria onde os dados


lidos sero armazenados.
Porm, no se deve uPlizar &cidade, pois o
idenPcador cidade, j se refere ao endereo de
memria do primeiro elemento do vetor.

CIn.ufpe.br
Leitura de Strings
Para a leitura de strings do teclado, pode ser uPlizada
a funo scanf com o especicador %s.

Porm, apenas %s captura somente uma sequencia


de caracteres, parando em qualquer caractere de
controle (espao, tabulao, etc).
Alm disso, o tamanho string no ser respeitado,
podendo causar buer overow se o usurio digitar
mais caracteres do que cabem na string.

CIn.ufpe.br
Leitura de Strings
Isso pode ser contornado na funo scanf com outros
especicadores:

[^\n] diz para a funo scanf parar apenas quando


encontrar um caractere \n (enter).
Podem ser uPlizados outros caracteres:
[^abc\n] diz para scanf parar apenas ao encontrar um dos
caracteres: a, b, c, ou \n.

CIn.ufpe.br
Leitura de Strings
Para evitar buer overow pode-se uPlizar um nmero aps %
para indicar o mximo de caracteres a serem lidos:

L no mximo 9 caracteres
digitados, pois deve deixar
espao para o \0.
%9[^\n] diz para a funo scanf parar apenas quando encontrar
um caractere \n (enter) ou quando o limite de 9 caracteres for
aPngido. O adiciona o \0 automaPcamente ao nal da string.
Outra opo uPlizar a funo fgets: Diferentemente do scanf, a
funo fgets inclui o
caractere \n (enter)
digitado pelo usurio ao
nal da string.
CIn.ufpe.br
Leitura de Strings
Em ambos os casos, os caracteres digitados pelo usurio porm
no lidos, cam no buer do teclado e sero entregues para a
prxima chamada de leitura.
UPlize ush(stdin) para descartar o que cou no buer do
teclado antes de fazer a prxima leitura. Para garanPr que os
novos dados digitados pelo usurio que sero lidos:

Descarta o que no foi


lido pelo primeiro scanf

CIn.ufpe.br
Manipulando Strings
Exemplo de uma funo que imprime uma string, caractere a
caractere at encontrar o \0:

Funo anloga a:

CIn.ufpe.br
Manipulando Strings
Calcula o comprimento de uma string:

Funo semelhante a strlen denida em string.h que retorna a


quanPdade de caracteres em uma string incluindo o \n:

char* s equivale a char s[]

CIn.ufpe.br
Manipulando Strings
Copiar uma string para outra: origem -> desPno

Funo anloga a strcpy denida em string.h:

Copia do segundo parmetro para o primeiro parmetro


assumindo que h espao suciente em dest para o contedo.
CIn.ufpe.br
Outras funes em string.h
Em C, no permiPdo comparar strings com os operadores <, >, ==,
<=, e >=. Para isto uPlize a funo strcmp:

Retorna um inteiro posiPvo se str1 lexicamente posterior a str2; zero
se as duas so idnPcas; e negaPvo se str1 lexicamente anterior que
str2; Ex.:

Copia n caracteres de origem para desPno:



Concatena n caracteres da origem em desPno:

CerPque-se de que a string de desPno possui espao


suciente para caber o que est sendo colocado nela CIn.ufpe.br
Vetor de Strings
Vetor de Strings equivale a um vetor de vetores
Matriz
Cada linha da matriz corresponde a uma string
Pl quando queremos armazenar uma coleo de strings

Cada linha da
matriz guarda
uma string
CIn.ufpe.br
ALvidade 1
Faa um programa que solicita ao usurio digitar o nome e
endereo completo (armazenando em duas strings). Em
seguida o programa imprime na tela o que foi digitado.

CIn.ufpe.br
ALvidade 2
Faa um programa que solicita ao usurio digitar o nome e
sobrenome.
Em seguida o programa solicita o usurio digitar rua,
numero, bairro, cidade (capturando todos os dados como
string).
Finalmente o programa concatena o nome e sobrenome e
mostra na tela.
Depois o programa concatena os dados do endereo e
imprime o endereo de uma s vez.

CIn.ufpe.br
ALvidade 3
Faca um programa que solicita o usurio digitar uma mensagem
(string). Em seguida o programa converte todos os caracteres
da string para maisculo e depois imprime os resultados.

CIn.ufpe.br
ALvidade 4
Faca um programa que solicita o usurio digitar o nome de 5
pessoas, leia estes nomes em um vetor de strings e, em
seguida, imprima o primeiro e o ulPmo deles na ordem
alfabPca.

CIn.ufpe.br

Anda mungkin juga menyukai