Sie sind auf Seite 1von 41

GMA038 - 2015/1

Universidade Federal de Uberlândia


Faculdade de Computação

Linguagem C: variáveis compostas homogêneas:


Arrays
Strings

Prof. Renato Pimentel

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 1

Relembrando: Comando while em C

Exemplo: criar um programa para ler 5 números e


mostrar o resultado da soma de tais números

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 2

Prof. Renato Pimentel 1


GMA038 - 2015/1

Relembrando: Comando while em C

Exemplo: criar um programa para ler 5 números e


mostrar o resultado da soma de tais números

E quando quisermos
somar 100 números?
Usar 100 variáveis?

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 3

Relembrando: Comando while em C

Versão correta, usando comando while


Mantenho variável val
para leitura dos dados
Crio variável contagem para
funcionar como contador
Mantenho variável soma para
atuar como acumulador

Acumulo soma a cada repetição

Incremento contagem a cada repetição


GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 4

Prof. Renato Pimentel 2


GMA038 - 2015/1

Relembrando: Comando while em C

Novo problema:
Faça um programa para ler 5 números, e que mostre,
após a leitura de todos, os números lidos juntamente
com o resultado de sua soma.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 5

Relembrando: Comando while em C

No código visto: valor lido na repetição anterior era


sobrescrito pela repetição atual:

Solução para o problema proposto: armazenar


todos os valores em variáveis diferentes.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 6

Prof. Renato Pimentel 3


GMA038 - 2015/1

Relembrando: Comando while em C

Solução:

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 7

Relembrando: Comando while em C

Solução:

E quando quisermos
somar 100 números?
Usar 100 variáveis?

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 8

Prof. Renato Pimentel 4


GMA038 - 2015/1

Um outro problema

Leia as notas de uma turma de 5 estudantes, e


depois imprima as notas que são maiores que a
média da turma.
Uma possível solução é dada a seguir:

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 9

Um outro problema

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 10

Prof. Renato Pimentel 5


GMA038 - 2015/1

Um outro problema

Novamente:
E quando tivermos
100 alunos?
Usar 100 variáveis?

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 11

Um outro problema

Para 100 alunos, serão necessários:


Uma variável para armazenar a nota de cada aluno:
100 variáveis;
Um comando de leitura para cada nota:
100 scanf( );
Um somatório de 100 notas;
Um comando de teste para cada aluno:
100 comandos if;
Um comando de impressão na tela para cada aluno:
100 printf( ).

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 12

Prof. Renato Pimentel 6


GMA038 - 2015/1

Nova solução

Uso de um vetor ou array.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 13

Prof. Renato Pimentel 7


GMA038 - 2015/1

Array

Vetor (array): conjunto de componentes do mesmo tipo


(variável composta homogênea):
Ex. 1: 12 números reais, cada um representando o lucro
mensal de uma loja, no período de um ano;
Ex. 2: 200 inteiros para indicar o estado de ocupação de
quartos de um hotel.
Um array é uma variável composta homogênea
unidimensional, por se tratar de um conjunto de
variáveis do mesmo tipo, que possuem o mesmo nome
e são alocadas sequencialmente na memória.
O que distingue as variáveis são os índices, que se referem
a sua localização dentro do array.
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 15

Array

Exemplo: um vetor para vendas no mês (chamado


vendas_mes) pode ser estruturado da seguinte
forma:

Nome do vetor: vendas_mes


0 1 2 3 4 5 6 7 8 9 10 11

vendas_mes[0] vendas_mes[6] vendas_mes[11]

vendas_mes[1]
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 16

Prof. Renato Pimentel 8


GMA038 - 2015/1

Array

Exemplo: um vetor para vendas no mês (chamado


vendas_mes) pode ser estruturado da seguinte
forma: Cada posição do vetor: índice

Nome do vetor: vendas_mes


0 1 2 3 4 5 6 7 8 9 10 11

vendas_mes[0] vendas_mes[6] vendas_mes[11]

vendas_mes[1]
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 17

Array

vendas no mês (chamado vendas_mes) pode ser


ilustrado da seguinte forma, se são vendidos 10,
15, 12, 10, 5, 21, 22, 25, 25, 25, 23, 25 produtos,
respectivamente, para cada mês:
Para cada índice (posição) do vetor
vendas_mes atribuímos um valor que corresponde ao
tipo de dado do vetor.
0 1 2 3 4 5 6 7 8 9 10 11

10 15 12 10 5 21 22 25 25 25 23 25

vendas_mes[0] vendas_mes[6] vendas_mes[11]

vendas_mes[1]
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 18

Prof. Renato Pimentel 9


GMA038 - 2015/1

Declaração de array em C

Arrays são agrupamentos de dados adjacentes na


memória. Declaração:
tipo_dado nome_array[N];
O comando acima define um array de nome
nome_array, capaz de armazenar N elementos
adjacentes na memória, com índices variando de 0
a N-1, do tipo tipo_dado
Ex: double notas[5];

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 19

Retornando ao primeiro problema

Faça um programa para ler 5 números, e que


mostre, após a leitura dos mesmos, os números
lidos juntamente com o resultado da soma de tais
números.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 20

Prof. Renato Pimentel 10


GMA038 - 2015/1

Retornando ao primeiro problema

Solução usando array de números reais

Obs.: note que ainda é


necessário informar ao
scanf o endereço de
memória (&) em que o
dado será armazenado.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 21

Retornando ao primeiro problema

Solução usando array de números reais

E se for para somar


100 números?
Estamos usando uma
só variável (um vetor
de double), mas ainda
temos que indexar
cada posição
separadamente

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 22

Prof. Renato Pimentel 11


GMA038 - 2015/1

Retornando ao primeiro problema

Solução: usar comandos de repetição.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 23

Retornando ao primeiro problema

Reescrevendo o código anterior (com 5 valores):

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 24

Prof. Renato Pimentel 12


GMA038 - 2015/1

Retornando ao primeiro problema

E se for para 100 valores?

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 25

Retornando ao segundo problema

Leia as notas de uma turma de 5 estudantes, e


depois imprima as notas que são maiores que a
média da turma.
Vamos considerar o problema acima, mas para
100 estudantes (inviável sem uso de array).

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 26

Prof. Renato Pimentel 13


GMA038 - 2015/1

Retornando ao segundo problema

As variáveis têm relação entre si:


todas armazenam notas de alunos;
Podemos declará-las usando um único nome para
todos os 100 alunos:
notas: conjunto de 100 números acessados por um
índice → array.

0 1 ... 99

notas
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 27

Retornando ao segundo problema

Na linguagem C, a indexação do array começa


sempre do zero.
Isto significa que, no exemplo anterior, os dados
serão indexados de 0 a 99:
notas[0], notas[1], ..., notas[99]

0 1 ... 99
81 52 72
notas
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 28

Prof. Renato Pimentel 14


GMA038 - 2015/1

Retornando ao segundo problema

Se o usuário digitar mais de 100 elementos em um


array de 100 elementos, o programa tentará ler
normalmente.
Porém, o programa os armazenará em uma parte
não alocada de memória, pois o espaço foi
alocado somente para 100 elementos.
Isto pode resultar nos mais variados erros no
instante da execução do programa.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 29

Retornando ao segundo problema

Cada elemento do array tem todas as


características de uma variável e pode aparecer
em expressões e atribuições. Ex:
notas[2] = notas[3] + notas [20];
Ex: somar todos os elementos de notas:
int soma = 0;
for(i=0;i < 100; i++)
soma = soma + notas[i];

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 30

Prof. Renato Pimentel 15


GMA038 - 2015/1

Exercício

Resolva o segundo problema a seguir, usando


array:
Leia as notas de uma turma de 5 estudantes, e depois
imprima as notas que são maiores que a média da
turma.
Para isso, reescreva o código do slide 10 e
adapte-o, usando arrays e estruturas de repetição
(ex.: for).

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 31

Array: observações sobre memória

As variáveis que declaramos no nosso código


ocupam determinada quantidade de bytes na
memória.
char c; ← 1 byte
int a; ← 4 bytes
double d; ← 8 bytes
E os vetores, quantos bytes ocupam?
char c[10];
int a[15];
double d[2];
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 32

Prof. Renato Pimentel 16


GMA038 - 2015/1

Array: observações sobre memória

As variáveis que declaramos no nosso código


ocupam determinada quantidade de bytes na
memória.
char c; ← 1 byte
int a; ← 4 bytes
double d; ← 8 bytes
E os vetores, quantos bytes ocupam?
char c[10];← 10x1 = 10 bytes
int a[15]; ← 15x4 = 60 bytes
double d[2]; ← 2x8 = 16 bytes
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 33

Array: observações sobre memória

char c[10];← 10x1 = 10 bytes


int a[15]; ← 15x4 = 60 bytes
double d[2]; ← 2x8 = 16 bytes
As regiões de memória alocadas para os vetores
são contínuas, ou seja, os endereços consecutivos
de cada índice dos vetores serão “vizinhos”.
Podemos imaginar a memória como uma
sequência de linear blocos de 1 byte.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 34

Prof. Renato Pimentel 17


GMA038 - 2015/1

Array: observações sobre memória

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 35

Array: observações sobre memória

char c;

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 36

Prof. Renato Pimentel 18


GMA038 - 2015/1

Array: observações sobre memória

char c;
c = 'h';

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 37

Array: observações sobre memória

char c;
c = 'h';

int a;

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 38

Prof. Renato Pimentel 19


GMA038 - 2015/1

Array: observações sobre memória

char c;
c = 'h';

int a;
a = 19;

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 39

Array: observações sobre memória

char c;
c = 'h';

int a;
a = 19;

char Sigla[4];

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 40

Prof. Renato Pimentel 20


GMA038 - 2015/1

Array: observações sobre memória

char c;
c = 'h';

int a;
a = 19;

char Sigla[4];
Sigla[0] = 'U';
Sigla[1] = 'F';
Sigla[2] = 'U';
Sigla[3] = '\0';

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 41

Prof. Renato Pimentel 21


GMA038 - 2015/1

Endereço de variáveis

Para descobrir o endereço de uma variável em C,


use o operador &.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 43

Endereço de variáveis

Para descobrir o endereço de uma variável em C,


use o operador &.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 44

Prof. Renato Pimentel 22


GMA038 - 2015/1

Exercícios

1. Crie um programa que preencha um vetor com


10 números inteiros (a serem fornecidos pelo
usuário), e a seguir mostre quais destes valores
são maiores que 7.
2. Faça um programa que leia um array de 8
posições. Em seguida, leia também dois valores X
e Y quaisquer correspondentes a duas posições
do array. Seu programa deverá exibir a soma dos
valores encontrados nas respectivas posições X e
Y.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 45

Exercícios

3. Crie um programa que leia dois arrays, A e B, com


5 inteiros em cada. Crie um novo array, C, tal que C
= A-B. Mostre na tela os valores do vetor C.
4. Faça um programa que calcule o desvio padrão de
um vetor V contendo n números,

onde m é a média deste vetor. Considere n=10. O


vetor deve ser lido do teclado.
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 46

Prof. Renato Pimentel 23


GMA038 - 2015/1

Arrays bidimensionais

Arrays vistos até aqui são unidimensionais –


elementos são organizados como em um vetor;
arrays bidimensionais (ou matrizes):
São arranjados como uma tabela de 2 dimensões;
Dois índices são necessários para acessar uma posição:
um para a linha e outro para a coluna;
Assim como em arrays unidimensionais, índices
começam sempre em ZERO.
Declaração:
tipo_variável nome_variável[linhas][colunas];

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 47

Arrays bidimensionais

Exemplo: um array com 100 linhas e 50 colunas:


int mat[100][50];
mat[0][1] = 99;

0 1 2 ... 49
0 99
1
...

99
mat[0][1]
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 48

Prof. Renato Pimentel 24


GMA038 - 2015/1

Arrays bidimensionais e
estruturas de repetição aninhadas

Como uma matriz possui dois índices, para


percorrer todos os seus elementos precisaremos
de dois comandos de repetição aninhados
(próximo slide):

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 49

Arrays bidimensionais e
estruturas de repetição aninhadas

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 50

Prof. Renato Pimentel 25


GMA038 - 2015/1

Arrays multidimensionais

Arrays podem ter várias dimensões, cada uma


identificada por um par de colchetes em sua
declaração:
int vet[5]; // 1 dimensão
float matriz[10][10]; // 2 dimensões
double cub[2][3][5]; // 3 dimensões
char X[5][5][5][5]; // 4 dimensões

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 51

Arrays multidimensionais

Embora comportem-se como estruturas com mais


de uma dimensão, os dados em um array,
independente de sua dimensão, são sempre
armazenados linearmente na memória:
int mat[5][5]; 0,0

4,4

0,0 1,0 2,0 3,0 4,0 4,4

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 52

Prof. Renato Pimentel 26


GMA038 - 2015/1

Arrays multidimensionais

Por tal razão, é importante saber: a dimensão que


se move (varia) mais rapidamente na memória é
sempre a que está mais à direita, e assim por
diante.
int vet[5]; // 1 dimensão
float matriz[10][10]; // 2 dimensões
double cub[2][3][5]; // 3 dimensões
char X[5][5][5][5]; // 4 dimensões

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 53

Inicialização de arrays

Arrays podem ser inicializados com certos valores


durante sua declaração. A forma geral de um array
com inicialização é:
tipo_da_variável nome_da_variável[tam1]
[tam2]...[tamN] = {lista_de_valores};

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 54

Prof. Renato Pimentel 27


GMA038 - 2015/1

Inicialização de arrays

A lista é composta por valores (do mesmo tipo da


variável), separados por vírgula. Os valores devem ser
dados na ordem em que serão colocados no array.
float vect[6] = {1.3, 4.5, 2.7, 4.1, 0.0, 100.1 };
int mat[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
int mat[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
char str[10] = { 'J', 'o', 'a', 'o', '\0' };
char str[10] = "Joao";
char nomes[3][10] = { "Joao", "Maria", "Jose" };

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 55

Inicialização de arrays

int mat[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 56

Prof. Renato Pimentel 28


GMA038 - 2015/1

Inicialização de arrays

Observe o endereço das variáveis:

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 57

Inicialização sem definição de tamanho

char mess[] = "Linguagem C:


flexibilidade e poder."; // A string
//mess terá tamanho 36.
int matrx[][2] = {1,2,2,4,3,6,4,8,5,10};
// O número de linhas de matrx será 5.
12
24
36
48
5 10
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 58

Prof. Renato Pimentel 29


GMA038 - 2015/1

Inicialização sem definição de tamanho

Nesse tipo de inicialização, o compilador C vai


considerar o tamanho do dado declarado como
sendo o tamanho do array.
Isto ocorre durante a compilação e não poderá
mais ser mudado durante o programa.
Isto é útil quando não queremos contar quantos
caracteres serão necessários para inicializarmos
uma string, por exemplo.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 59

Exercícios (matrizes)

1. Crie um programa que preencha uma matriz 5 x


3 com as notas de 5 alunos em 3 provas. O
programa deverá mostrar, para cada um dos
alunos, as suas notas, e ao final, a média final,
considerando os 3 resultados obtidos.
2. Elabore um programa que leia uma matriz
quadrada, 3 x 3. Ao final, o programa deverá
mostrar os elementos desta matriz e dizer se a
matriz é simétrica ou não.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 60

Prof. Renato Pimentel 30


GMA038 - 2015/1

Exercícios (matrizes)

3. Faça um programa que leia uma matriz A de


tamanho 4 x 4. Em seguida, calcule e imprima a
matriz B, onde B = A x A (produto de matrizes).

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 61

Strings

Strings são cadeias (sequências adjacentes) de


caracteres armazenados na memória do
computador.
Em outras palavras, são arrays com elementos do tipo
char.
Declarando uma string:
Como visto para arrays de outros tipos primitivos de
dados:
char Sigla[4];

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 62

Prof. Renato Pimentel 31


GMA038 - 2015/1

Strings: caractere terminador \0

Elemento seguinte à última letra da frase ou


palavra armazenada em uma string: caractere
'\0'.
Indica o final da sequência de caracteres.
Exemplo:
char str[10] = “UFU”;
U F U \0 : ? x A @ 2

str[0] str[3] str[9]

str[1]

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 63

Strings: caractere terminador \0

Elemento seguinte à última letra da frase ou


palavra armazenada em uma string: caractere
'\0'.
Indica o final da sequência de caracteres.
Exemplo:
char str[10] = “UFU”;
U F U \0 : ? x A @ 2
Região Região não
inicializada: inicializada:
3 caracteres “lixo” de
str[0] str[3] str[9]
+ caractere memória
'\0'
str[1]

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 64

Prof. Renato Pimentel 32


GMA038 - 2015/1

Strings: caractere terminador \0

Elemento seguinte à última letra da frase ou


palavra armazenada em uma string: caractere
'\0'.
Note que na declaração de uma string, quando
explicitamos seu tamanho devemos considerar tal
caractere.
Exemplo:
char str[6] = “Teste”; // E não str[5] !
Str[0] = 'L'; // Acessando elemento
//individualmente. Agora str é “Leste”

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 65

Strings: caractere terminador \0

Note que podemos ainda declarar a string, como


qualquer vetor, sem tamanho definido:
char str[] = “Teste”;
O programa determinará qual o tamanho necessário (6,
já considerando o caractere de terminação \0.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 66

Prof. Renato Pimentel 33


GMA038 - 2015/1

Strings: aspas duplas e simples

Usam-se aspas duplas (“ “) para inicializar a


string:
char str[6] = “Teste”;
Na atribuição de caracteres, usam-se aspas
simples ou apóstrofos (' '):
str[0] = 'L';
Observação importante: “A” é diferente de 'A'
“A” A \0
'A' A

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 67

Strings: atribuição

Cuidado na atribuição:
char str1[20] = “Ola mundo”;
char str2[20];
str2 = str1; // ERRADO!!!
Motivo: string é um array → C não suporta a
atribuição de um array para outro.
Deve-se proceder elemento a elemento.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 68

Prof. Renato Pimentel 34


GMA038 - 2015/1

Strings: atribuição

Forma correta:

É possível também a partir de uma função


especializada – veja adiante → Mais simples!!
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 69

Strings: entrada de dados

Leitura do teclado pode ser feita via scanf( ).


Exemplo:
char str[20];
scanf(“%s”,str);
Omite-se o operador de endereço & neste caso.
Problema: scanf( ) é uma má escolha como
comando de leitura de dados:
A escrita é interrompida quando o usuário tecla barra
de espaço → leitura de 1 palavra apenas.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 70

Prof. Renato Pimentel 35


GMA038 - 2015/1

Strings: entrada de dados

Leitura do teclado pode ser feita via outra função,


a função gets( ).
Permite a leitura incluindo espaçamentos, até que o
usuário tecle Enter.
Exemplo:
char str[20];
gets(str);

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 71

Strings: entrada de dados

Às vezes, podem ocorrer erros durante a leitura de


caracteres ou strings. Para resolver esses pequenos
erros, podemos limpar o buffer do teclado, usando a
função setbuf( ):
char str[10];
setbuf(stdin, NULL); //limpa o buffer
gets(srt);
Função preenche um buffer (1o. parâmetro) com
determinado valor (2o.parâmetro). No caso, o buffer de
entrada padrão do teclado (stdin) é preenchido com
valor vazio (NULL).
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 72

Prof. Renato Pimentel 36


GMA038 - 2015/1

Strings: entrada de dados

Uma alternativa à função gets( ) é fgets( ).


Assim como gets( ), permite a leitura incluindo os
espaços, até que o usuário tecle Enter.
Exemplo:
char str[20];
fgets(str, 20, stdin);
Possui mais 2 parâmetros, sendo o último o buffer
de onde a string será lida (stdin indica entrada via
teclado), e o segundo o tamanho da string a ser
lida – limite máximo de caracteres a serem lidos.
GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 73

Strings: entrada de dados

Vantagem de fgets( ) sobre gets( ):


A função fgets( ) lê a string até que um caractere de
nova linha ('\n') seja lido ou até que “tamanho-1”
caracteres tenham sido digitados pelo usuário.
Evita-se que ocorra o estouro de buffer (quando se tenta ler
algo maior do que pode ser armazenado na string). gets( )
não tem tal controle.
Outra diferença: fgets( ) armazena '\n' na string,
o que não ocorre com gets( ).

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 74

Prof. Renato Pimentel 37


GMA038 - 2015/1

Strings: saída de dados

Com printf( ): usa-se o especificador %s.


char str[20] = “Hello World”;
printf(“%s”, str);
Com fputs( ): “inverso” da função fgets( ).
Parâmetro de tamanho desnecessário neste caso.
char str[20] = “Hello World”;
fputs(str, stdout); // stdout: saida
//padrão (tela)

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 75

Strings: manipulação

Funções disponíveis na biblioteca nativa da


linguagem C <string.h>.
Alguns exemplos de manipulação:
Cópia de dados.
Comparação de strings.
Tamanho da string.
Atenção: Não se esqueça de colocar a diretiva
#include <string.h> no início de seu
arquivo .c.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 76

Prof. Renato Pimentel 38


GMA038 - 2015/1

Strings: tamanho

Tamanho da string: função strlen( ) - de string


length (tamanho da cadeia).
char str[15] = "teste";
printf("%d",strlen(str));
A saída do comando acima é 5 (número de caracteres
da palavra “teste”), e não 15 (tamanho total da string).

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 77

Strings: copiando

Copiando de string para outra: função


strcpy( ).
Sintaxe: strcpy(destino,origem);
Exemplo:
printf ("Entre com uma string: ");
gets(str1);
strcpy(str2, str1);
printf("%s",str2);

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 78

Prof. Renato Pimentel 39


GMA038 - 2015/1

Strings: concatenação

Concatenação de strings: função strcat( ).


Conteúdo da string de origem é adicionado ao final
da string de destino.
Sintaxe: strcat(destino,origem);
Exemplo:
char str1[15] = "bom ";
char str2[15] = "dia";
strcat(str1,str2);
printf("%s",str1);

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 79

Strings: comparando conteúdo

Função strcmp( ). Conteúdo de uma string é


comparado ao de outra. A função retorna 0
(ZERO) se o conteúdo de ambas é igual.
Sintaxe: strcmp(str1,str2);
Exemplo:
if (strcmp(str1,str2) == 0)
printf(“Strings iguais”);
else
printf(“Strings diferentes”);

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 80

Prof. Renato Pimentel 40


GMA038 - 2015/1

Exercícios (srings)

1. Crie um programa que leia uma string do


usuário, e em seguida mostre esta string escrita na
ordem inversa.
2. Faça um programa que leia uma palavra e diga
se tal palavra é um palíndromo – ou seja, uma
palavra que quando escrita de trás para frente não
se altera. Ex.: arara, osso, ufu.
3. Crie um programa que leia uma string do
usuário e diga, caso existam, quais letras estão
repetidas (ocorrem mais de uma vez) nesta string.

GMA038 - Intro. Ciênc. Computação Linguagem C: Arrays / Strings 81

Prof. Renato Pimentel 41

Das könnte Ihnen auch gefallen