Você está na página 1de 37

ECT2303 – Linguagem de Programação

Aula 14 þ Funções e Strings I

Einstein Santos

UFRN

19 de setembro de 2018

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 1 / 37


Sumário

1 Definição de cadeias de caracteres

2 Cadeias de caracteres constantes e variáveis

3 Operação de leitura e de escrita com cadeias de caracteres

4 Inicialização de cadeias de caracteres

5 Funções de manipulação de cadeias de caracteres

6 Cadeia de caracteres e funções

7 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 2 / 37


Sumário

1 Definição de cadeias de caracteres

2 Cadeias de caracteres constantes e variáveis

3 Operação de leitura e de escrita com cadeias de caracteres

4 Inicialização de cadeias de caracteres

5 Funções de manipulação de cadeias de caracteres

6 Cadeia de caracteres e funções

7 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 3 / 37


Definição de cadeias de caracteres
Definição

Cadeia de caracteres ou string é um vetor do tipo char que armazena


um texto formado de caracteres e sempre terminado pelo caractere
zero (‘\0’). Em outras palavras, é uma série de caracteres, em que
cada um ocupa um byte de memória, armazenados em sequência e
terminados por um byte de valor zero (‘\0’). Cada caractere é um
elemento independente do vetor e pode ser acessado por meio de um
índice.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 4 / 37


Sumário

1 Definição de cadeias de caracteres

2 Cadeias de caracteres constantes e variáveis

3 Operação de leitura e de escrita com cadeias de caracteres

4 Inicialização de cadeias de caracteres

5 Funções de manipulação de cadeias de caracteres

6 Cadeia de caracteres e funções

7 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 5 / 37


Cadeias de caracteres constantes e variáveis
Cadeias de caracteres constantes

Todo texto entre aspas duplas é tratado em C++ como uma cadeia de
caracteres constante.
A terminação com zero, também chamado NULL, é importante, pois
é a única maneira que as funções possuem para poder reconhecer
onde é o fim da cadeia.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 6 / 37


Cadeias de caracteres constantes e variáveis
Cadeias de caracteres constantes

Ex.:

1 cout <<" Blz ! " ;

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 7 / 37


Cadeias de caracteres constantes e variáveis
Cadeias de caracteres variáveis – Sintaxe

char NOME [ TAMANHO ];

sendo TAMANHO um inteiro > 0.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 8 / 37


Cadeias de caracteres constantes e variáveis
Cadeias de caracteres variáveis – Exemplos

1) char nome[100];

2) char senha[11], contra_senha[16];

3) char alfabeto[27], vogal[6], consoantes[22];

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 9 / 37


Sumário

1 Definição de cadeias de caracteres

2 Cadeias de caracteres constantes e variáveis

3 Operação de leitura e de escrita com cadeias de caracteres

4 Inicialização de cadeias de caracteres

5 Funções de manipulação de cadeias de caracteres

6 Cadeia de caracteres e funções

7 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 10 / 37


Operação de leitura e de escrita com cadeias de
caracteres
Operação de leitura de cadeias de caracteres – Exemplo utilizando ‘cin’

. Implemente um programa em C++ que leia o nome de uma pessoa e


o exiba antepondo-o com a palavra ‘Olá’.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 11 / 37


Operação de leitura e de escrita com cadeias de
caracteres
Operação de leitura de cadeias de caracteres – Exemplo utilizando ‘cin’

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
5 int main ()
6 {
7 char nome [80];
8
9 cout <<" Digite o seu primeiro nome : " ;
10 cin >> nome ;
11
12 cout <<" Olá " << nome <<" ! " << endl ;
13
14 return 0;
15 }

-> Alberto
<- Olá Alberto!

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 12 / 37


Operação de leitura e de escrita com cadeias de
caracteres
Operação de leitura de cadeias de caracteres – Exemplo utilizando ‘cin’

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
5 int main ( void )
6 {
7 char nome [80];
8
9 cout <<" Digite o seu nome completo : " ;
10 cin >> nome ;
11
12 cout <<" Olá " << nome <<" ! " << endl ;
13
14 return 0;
15 }

-> Alberto Santos Dumont


<- Olá Alberto!

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 13 / 37


Operação de leitura e de escrita com cadeias de
caracteres
Operação de leitura de cadeias de caracteres – Exemplo utilizando ‘cin.getline()’

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
5 int main ( void )
6 {
7 char nome [80];
8
9 cout <<" Digite o seu nome completo : " ;
10 cin . getline ( nome ,80) ;
11
12 cout <<" Olá " << nome <<" ! " << endl ;
13
14 return 0;
15 }

-> Alberto Santos Dumont


<- Olá Alberto Santos Dumont!

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 14 / 37


Operação de leitura e de escrita com cadeias de
caracteres
Operação de leitura de cadeias de caracteres – Exemplo utilizando ‘cin.getline()’

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
5 int main ( void )
6 {
7 char nome [80];
8
9 cout <<" Digite o seu nome completo : " ;
10 cin . getline ( nome ,80 , ’. ’) ;
11
12 cout <<" Olá " << nome <<" ! " << endl ;
13
14 return 0;
15 }

-> Alberto Santos. Dumont


<- Olá Alberto Santos!

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 15 / 37


Operação de leitura e de escrita com cadeias de
caracteres
Operação de escrita de cadeias de caracteres – Exemplo

1 char nome [80];


2
3 cin . getline ( nome ,80) ; // Lê do teclado toda a cadeia de
caracteres e a armazena em ’ nome ’
4
5 cout << nome ; // Exibe na tela toda a cadeia armazenada em ’ nome ’
6
7 cout << nome [0]; // Exibe somente o primeiro caractere da cadeia
armazenada em ’ nome ’.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 16 / 37


Sumário

1 Definição de cadeias de caracteres

2 Cadeias de caracteres constantes e variáveis

3 Operação de leitura e de escrita com cadeias de caracteres

4 Inicialização de cadeias de caracteres

5 Funções de manipulação de cadeias de caracteres

6 Cadeia de caracteres e funções

7 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 17 / 37


Inicialização de cadeias de caracteres
Formas de inicialização

Assim como vetores de outros tipos podem ser inicializados, os vetores


do tipo char também podem.

Ex.:

1 char nome [4] = { ’E ’ , ’C ’ , ’T ’ , ’ \0 ’ };


2
3 char nome [4] = " ECT " ;
4
5 char nome [] = { ’E ’ , ’C ’ , ’T ’ , ’ \0 ’ };
6
7 char nome [] = " ECT " ;

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 18 / 37


Inicialização de cadeias de caracteres
Exemplo – Enunciado

. Implemente um programa em C++ que leia o nome de uma pessoa e


que conte e exiba a quantidade de vogais presentes no nome lido.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 19 / 37


Inicialização de cadeias de caracteres
Exemplo – Implementação

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
5 int main ()
6 {
7 char nome [80] , vogais1 [6]= " aeiou " , vogais2 [6]= " AEIOU " ;
8 int i =0 , cont =0;
9
10 cout <<" Digite seu nome : " ;
11 cin . getline ( nome ,80) ;
12
13 while ( nome [ i ]) {
14 for ( int j =0; j <5; j ++) {
15 if ( nome [ i ]== vogais1 [ j ] || nome [ i ]== vogais2 [ j ]) {
16 cont ++;
17 }
18 }
19 i ++;
20 }
21
22 cout <<" Quantidade de vogais : " << cont << endl ;
23
24 return 0;
25 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 20 / 37


Sumário

1 Definição de cadeias de caracteres

2 Cadeias de caracteres constantes e variáveis

3 Operação de leitura e de escrita com cadeias de caracteres

4 Inicialização de cadeias de caracteres

5 Funções de manipulação de cadeias de caracteres

6 Cadeia de caracteres e funções

7 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 21 / 37


Funções de manipulação de cadeias de caracteres
Algumas funções da biblioteca cstring

F strlen() retorna o tamanho de uma cadeia de caracteres enviada como


argumento.
F strcat() crescenta uma cadeia de caracteres ao final de outra. Essa
função recebe como argumento duas cadeias e armazena a
cadeia final, após a anexação, na primeira.
F strcmp() compara duas cadeias de caracteres enviadas como argu-
mento. Ela retorna um número < 0 se a cadeia1 < cadeia2,
0 se a cadeia1 == cadeia2 e > 0 se a cadeia1 > cadeia2.
F strcpy() recebe duas cadeias de caracteres e copia a segunda cadeia
na primeira.

Obs: As funções apresentadas necessitam da declaração da biblioteca ’cstring’.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 22 / 37


Funções de manipulação de cadeias de caracteres
Exemplo – Enunciado

. Implemente um programa em C++ que leia o nome de uma pessoa e


que exiba a quantidade de caracteres alfabéticos que ele possui.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 23 / 37


Funções de manipulação de cadeias de caracteres
Exemplo – Implementação

1 # include < iostream >


2 # include < cstring >
3
4 using n a m e s p a c e std ;
5
6 int main ()
7 {
8 char nome [80];
9 int tam , letras ;
10
11 cout <<" Digite o seu nome : " ;
12 cin . getline ( nome ,80) ;
13
14 tam = strlen ( nome ) ;
15 letras = tam ;
16
17 for ( int i =0; i < tam ; i ++) {
18 if ( nome [ i ]== ’ ’) {
19 letras - -;
20 }
21 }
22
23 cout <<" Quant . letras : " << letras << endl ;
24
25 return 0;
26 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 24 / 37


Funções de manipulação de cadeias de caracteres
Exemplo – Enunciado

. Implemente um programa em C++ que leia o nome de uma pessoa (x)


e que exiba ’Bom dia, x!’, ’Boa tarde, x!’ ou ’Boa noite, x!’ mediante a
leitura da hora.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 25 / 37


Funções de manipulação de cadeias de caracteres
Exemplo – Implementação

1 # include < iostream >


2 # include < cstring >
3
4 using n a m e s p a c e std ;
5
6 int main ()
7 {
1 } else {
8 char nome [80] , saudacao [100];
2 strcpy ( saudacao , " Boa noite , "
9 int hora ;
);
10
3 strcat ( saudacao , nome ) ;
11 cout <<" Digite o seu nome : " ;
4 }
12 cin . getline ( nome ,80) ;
5
13
6 cout << saudacao <<" !\ n " ;
14 cout <<" Digite a hora ( HH ) : " ;
7
15 cin >> hora ;
8 return 0;
16
9 }
17 if ( hora >=5 && hora <12) {
18 strcpy ( saudacao , " Bom dia , " ) ;
19 strcat ( saudacao , nome ) ;
20 } else if ( hora >=12 && hora <18) {
21 strcpy ( saudacao , " Boa tarde , "
);
22 strcat ( saudacao , nome ) ;

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 26 / 37


Funções de manipulação de cadeias de caracteres
Exemplo – Enunciado

. Implemente um programa em C++ que inicialize uma cadeia de carac-


teres com uma senha alfanumérica e que peça ao usuário para digitar
uma senha e exiba uma mensagem se houve coincidência ou não com
a senha pré-estabelecida.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 27 / 37


Funções de manipulação de cadeias de caracteres
Exemplo – Implementação

1 # include < iostream >


2 # include < cstring >
3
4 using n a m e s p a c e std ;
5
6 int main ()
7 {
8 char senha []= " ECT2303 " , entrada [20];
9
10 cout <<" Digite a senha : " ;
11 cin . getline ( entrada ,20) ;
12
13 if ( strcmp ( entrada , senha ) == 0) {
14 cout <<" Senha correta ! " << endl ;
15 } else {
16 cout <<" Senha incorreta ! " << endl ;
17 }
18
19 return 0;
20 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 28 / 37


Sumário

1 Definição de cadeias de caracteres

2 Cadeias de caracteres constantes e variáveis

3 Operação de leitura e de escrita com cadeias de caracteres

4 Inicialização de cadeias de caracteres

5 Funções de manipulação de cadeias de caracteres

6 Cadeia de caracteres e funções

7 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 29 / 37


Cadeia de caracteres e funções
Exemplo – Enunciado

. Implemente um programa em C++ que leia na função main() uma ca-


deia de caracteres e a armazene em um vetor. O programa deve
utilizar uma função auxiliar que receba essa cadeia e retorne para a
função main() quantas palavras existem nela. A quantidade deve ser
exibida.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 30 / 37


Cadeia de caracteres e funções
Exemplo – Implementação

1 # include < iostream >


2
3 using n a m e s p a c e std ;
1 int main ()
4
2 {
5 int verifica ( char cadeia [])
3 char texto [100];
6 {
4 cout <<" Digite a cadeia : " ;
7 int i =0 , cont =1;
5 cin . getline ( texto ,100) ;
8
6
9 while ( cadeia [ i ]) {
7 cout <<" A quantidade de palavras é
10 if ( cadeia [ i ] == ’ ’) {
" << verifica ( texto ) <<" . " <<
11 cont ++;
endl ;
12 }
8
13 i ++;
9 return 0;
14 }
10 }
15
16 return cont ;
17 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 31 / 37


Cadeia de caracteres e funções
Exemplo – Enunciado

. Escreva um programa em C++ que leia na função main() as matrículas


de n alunos. O programa deve usar uma função auxiliar para receber
uma matrícula por vez e contar as quantidades de alunos ingressos
nos anos de 2016, 2017 e 2018. As quantidades devem ser exibidas
na função main().

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 32 / 37


Cadeia de caracteres e funções
Exemplo – Implementação

1 cout <<" Digite a quantidade de


1 # include < iostream >
alunos : " ;
2
2 cin >>n ;
3 using n a m e s p a c e std ;
3
4
4 cin . ignore () ;
5 void contagem ( char m [] , int c
5
[])
6 cout <<" Digite as matrículas : " <<
6 {
endl ;
7 if ( m [2]== ’1 ’ && m [3]== ’6 ’)
7 for ( int i =0; i < n ; i ++) {
8 c [0]++;
8 cin . getline ( mat ,12) ;
9 else if ( m [2]== ’1 ’ && m [3]== ’
9 contagem ( mat , cont ) ;
7 ’)
10 }
10 c [1]++;
11
11 else if ( m [2]== ’1 ’ && m [3]== ’
12 cout <<" Quantidade de alunos de
8 ’)
2016: " << cont [0] << endl ;
12 c [2]++;
13 cout <<" Quantidade de alunos de
13 }
2017: " << cont [1] << endl ;
14
14 cout <<" Quantidade de alunos de
15 int main ()
2018: " << cont [2] << endl ;
16 {
15
17 int n , cont [3]={};
16 return 0;
18 char mat [12];
17 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 33 / 37


Sumário

1 Definição de cadeias de caracteres

2 Cadeias de caracteres constantes e variáveis

3 Operação de leitura e de escrita com cadeias de caracteres

4 Inicialização de cadeias de caracteres

5 Funções de manipulação de cadeias de caracteres

6 Cadeia de caracteres e funções

7 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 34 / 37


Exercícios

1. Escreva um programa em C++ que gere e exiba uma cadeia de ca-


racteres alfabéticos de forma aleatória de tamanho 20, de forma que
as posições pares recebam consoantes e as posições ímpares vogais.

2. Implemente um programa em C++ que leia uma cadeia de caracteres


no formato N1OPN2, onde N1 e N2 são caracteres numéricos de ’0’
a ’9’ e OP um dos seguintes caracteres : ’+’, ’-’, ’/’ ou ’*’. O programa
deve exibir o resultado da expressão lida. Ex.: “7 + 4” → 11.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 35 / 37


Atividade Extraclasse
Pesquisa

- Pesquise as demais funções disponibilizadas na biblioteca cstring.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 36 / 37


Funções e Strings I

Fim da aula 14

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de setembro de 2018 37 / 37