40
Pearson Education Slide 1

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Embed Size (px)

Citation preview

Page 1: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 1

Page 2: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 2

Capítulo 9

Criado por Frederick H. Colclough, Colorado Technical University

Strings

Page 3: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 3

Objetivos do Estudo Um Tipo Vetor para Strings

Strings C Ferramentas de Manipulação de

Caracteres E/S de caracteres Funções-membros get E put Funções-membro putback, peek E ignore

Classe-Padrão string Processamento de Strings

Page 4: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 4

Introdução Dois tipos string: Strings C

Vetor com tipo-base char Final da string é marcado com nulo, ‘\0’ ‘Antigo’ método herdado do C

Classe String Utiliza Modelos (Templates)

Page 5: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 5

Strings C Vetor com tipo-base char

Um caractere por variável indexada Um caracter extra: ‘\0’

Chamado ‘caractere nulo’ Marcador de final

Nós usamos strings C A literal “Olá” armazenada como string C

Page 6: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 6

Variável String C Vetor de caracteres:

char s[10]; Declara uma variável string C para guardar até

9caracteres

+ um caracter nulo Vetor ‘parcialmente preechido’

Grande o bastante para guardar o tamanho máximo da string

Indicar o final com o caractere nulo A única diferença de um vetor padrão:

Deve conter o caracter nulo

Page 7: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 7

Armazenamento String C Um vetor com tipo-

base char:char s[10];

Se s contém a string “Oi, mamãe!”, ela é armazenada

como:Painel página 242

Page 8: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 8

Inicialização de uma String C Pode-se inicializar uma string C:

char minhaMensagem[20] = “Oi você aí.”; Não é necessário preencher o vetor inteiro Inicialização coloca ‘\0’ no final

Pode-se omitir o tamanho do vetor:char stringCurta[] = “abc”;

A variável string C receberá o tamanho do

comprimento da string C mais um. NÃO como:

char stringCurta[] = {‘a’, ‘b’, ‘c’};

Page 9: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 9

Índices de uma String C Uma string C é um vetor Pode-se acessar variáveis indexadas de:

char nossaString[5] = “Oi”; nossaString[0] é ‘O’ nossaString[1] é ‘i’ nossaString[2] é ‘\0’ nossaString[3] é desconhecido nossaString[4] é desconhecido

Page 10: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 10

Manipulação de Índices de uma String C

Pode-se manipular as variáveis indexadaschar felizString[7] = "LaRaRa";

felizString[6] = ’Z’; Cuidado!

Aqui, ‘\0’ (nulo) foi sobrescrito por um ‘Z’! Se nulo foi sobrescrito, string C não ‘age’

mais como uma string C! Resultados Imprevisíveis!

Page 11: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 11

Biblioteca Declarando strings C

Não requer nenhuma biblioteca C++ Predefinição de C++

Manipulações Requerem a Biblioteca <cstring> Incluída quando estiver usando strings C

Geralmente necessária para a ‘diversão’ com elas

Page 12: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 12

= e == com strings C strings C não são como outra variáveis

Não se pode atribuir ou comparar:char umaString[10];umaString = “Olá”; // ILEGAL!

Pode-se somente usar ‘= ’ na declaração de uma string C! Deve-se usar uma função da biblioteca para atribuições:

strcpy(umaString, “Olá”); Função predefinida (em <cstring>) Torna o valor de umaString igual a “Olá” Nenhum controle de tamanho!

O programador deve controlar, exatamente como em outros vetores!

Page 13: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 13

Comparando strings C Também não se pode usar o operador

==char umaString[10] = “Olá”;char outraString[10] = “Até logo”;

umaString == outraString; // NÃO permitido!

Deve-se usar uma função da biblioteca

novamente:if (strcmp(umaString, outraString))

cout << “As strings não são iguais.”;else

cout << “As strings são iguais.”;

Page 14: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 14

A Biblioteca <cstring> Cheia de funções de

manipulação de stings

Painel 9.1 página 245

Page 15: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 15

A Biblioteca <cstring> (cont) Cheia de funções de

manipulação de stings

Painel 9.1 página 246

Page 16: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 16

Funções String C: strlen() Freqüentemente usado para saber o

comprimento da string:char minhaString[10] = “LaRaRa”;cout << strlen(minhaString);

Retorna o número de caracteres Não incluindo o caractere nulo

Resultado:6

Page 17: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 17

Funções String C : strcat() strcat() ‘Concatenação de String’:

char varString[20] = "O rato";

strcat(varString, "roeu"); Observe o resultado:

varString agora contém “O ratoroeu” Cuidado! Incorpore os espaços quando necessário!

Page 18: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 18

Argumentos e Parâmetros de string C Lembre-se: string C é um vetor Então um parâmetro string C é um parâmetro de vetor

strings C passadas para funções podem sermodificadas pelas funções que recebem!

Como todos os vetores, incluir o tamanho também Uma função ‘poderia’ usar também ‘\0’ para encontrar o final

Assim o tamanho não é necessário se a função

não for modificar o parâmetro Use o modificador ‘const’ para proteger a string C

Page 19: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 19

Saída de String C Strings C podem ser enviadas para a

saída com o operador de inserção, <<. Como nós já temos feito:

cout << notícia << “ UAU.\n”; Onde notícia é uma variável string C

Possível porque o operador << ésobrecarregado para strings C!

Page 20: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 20

Entrada para String C É possível preencher uma variável

string C por meio do operador de entrada >>

Isto é possível, porém Espaço em branco é ‘delimitador’

Tabulação, espaço e quebra de linha são ‘omitidos’ A leitura ‘pára’ no próximo delimitador

Esteja alerta para o tamanho da string C Deve ser grande o bastante para armazenar a string

inteira! C++ não emite nenhum aviso!

Page 21: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 21

Exemplo de Entrada para String C char a[80], b[80];

cout << “Digite alguma coisa:\n”;cin >> a >> b;cout << a << b << “FIM DA ENTRADA\n”;

Diálogo apresentado:Digite alguma coisa : La ra ra para você!LaraFIM DA ENTRADA

Note: A parte sublinhada foi digitada String C a recebe: “La” String C b recebe: “ra”

Page 22: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 22

Entrada de Linha para a String C Pode-se receber uma linha inteira dentro da string C

Use a função-membro predefinida getline():

char a[80];cout << “Digite alguma coisa:\n”;cin.getline(a, 80);cout << a << “FIM DA ENTRADA\n”;

Diálogo:Digite alguma coisa: La ra ra para você! La ra ra para você!FIM DA ENTRADA

Page 23: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 23

Mais Sobre getline() Pode-se explicitamente informar o tamanho que será

recebido:

char stringCurta[5];cout << “Digite alguma coisa:\n”;cin.getline(stringCurta, 5);cout << stringCurta << “FIM DA ENTRADA\n”;

Resulta em:Digite alguma coisa : larararamlaraFIM DA ENTRADA

Força a leitura de somente QUATRO caracteres

É necessário lembrar do caracter nulo

Page 24: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 24

E/S de Caracteres Entrada e Saída de dados

Todos tratados como caracteres ex.: número 10 apresentado como ‘1’ e ‘0’ Conversão feita automaticamente

Utiliza recursos de baixo-nível

Podemos também usar os mesmos

recursos de baixo-nível para nós

Page 25: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 25

Função-membro get() Lê um caractere de cada vez Função-membro do objeto cin:

char proximoSimbolo;cin.get(proximoSimbolo);

Lê o próximo caractere e coloca-o na variávelproximoSimbolo

O argumento deve ser um tipo char Não uma ‘string’!

Page 26: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 26

Função-membro put() Apresenta um caracter de cada vez Função-membro do objeto cout: Exemplos:

cout.put(‘a’); Apresentará como saída na tela a letra ‘a’:

char minhaString[10] = “Olá”;cout.put(minhaString[1]);

Apresentará como saída na tela a letra ’l’:

Page 27: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 27

Mais Sobre Funções-membros putback()

Lê uma vez, pode ser necessário ‘devolvê-lo’ cin.putback(ultimoCaractere);

peek() Retorna o próximo caractere, mas deixa-o lá peekChar = cin.peek();

ignore() Ignora a entrada, até o caractere designado cin.ignore(1000, ‘\n’);

Salta no máximo 1000 caracteres até ‘\n’

Page 28: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 28

Funções de Manipulação de Caracteres

Painel 9.3 página 255

Page 29: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 29

Funções de Manipulação de Caracteres (cont)

Painel 9.3

página 256

Page 30: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 30

Classe-Padrão string Definida na Biblioteca:

#include <string>using namespace std;

Variáveis String e Expressões Tratadas como tipos simples

Pode-se atribuir, comparar, adicionar:string s1, s2, s3;s3 = s1 + s2; //Concatenaçãos3 = “Olá mamãe!” //Atribuição

Note que a string C “Olá mamãe!” foi automaticamenteconvertida para o tipo string!

Page 31: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 31

Programa Usando a Classe StringPainel 9.4 página 259

Page 32: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 32

E/S com a Classe string Exatamente como em outros tipos! string s1, s2;

cin >> s1;cin >> s2;

Resulta:Se o usuário digitar:Que os pêlos dos seus dedos do pé fiquem longos e encaracolados!

A extração ainda ignora os espaços em branco:s1 recebe o valor “Que”s2 recebe o valor “os”

Page 33: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 33

getline() com a Classe string

Para linhas completas:string linha;

cout << "Digite uma linha de entrada:\n";

getline(cin, linha);

cout << linha << "FIM DA ENTRADA\n";

Diálogo produzido:Digite alguma coisa:

La ra ra para você!

La ra ra para você!FIM DA ENTRADA Semelhante ao uso de getline() com strings

C

Page 34: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 34

Outras Versões de getline()

Pode-se especificar o caracter ‘delimitador’:string linha;

cout << "Digite alguma coisa:\n";

getline(cin, linha, ’?’); Recebe a entrada até que ‘?’ seja

encontrado getline() retorna uma referência

string s1, s2;getline(cin, s1) >> s2;

Resulta em: (cin) >> s2;

Page 35: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 35

Armadilha: Misturando Métodos de Entrada

Cuidado ao misturar cin >> variável and getline int n;

string linha;cin >> n;getline(cin, linha);

Se a entrada for: 42 Olá mochileiro.

A variável n recebe realmente 42 linha é fixado como igual à string vazia!

cin >> n ignorou os espaços em branco, deixando‘\n’ para a próxima entrada para getline()!

Page 36: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 36

Processamento de Strings com a Classe string

Mesmas operações disponíveis para Strings C

E mais! Há mais de 100 membros e outras funções

associadas

Algumas funções-membros: .length()

Retorna o comprimento de uma string variável .at(i)

Retorna uma referência ao caracter na posição i

Page 37: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 37

Funções-membros da classe-padrão string

Página 9.7página 265

Page 38: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 38

Funções-membros da classe-padrão string (cont)

Página 9.7 página 266

Page 39: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 39

Conversão entre Objetos String e Strings C

Conversões automáticas de tiposde string C para objeto string:

char umaStringC[ ] = "Esta é a minha string C.";string variavelString;variavelString = umaStringC;

Perfeitamente legal e apropriada! umaStringC = variavelString;

ILEGAL! Não pode converter automaticamente para string

C Deve usar conversão explícita:

strcpy(umaStringC, variavelString.c_str( ));

Page 40: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings

Pearson Education Slide 40

Sumário Variável string C é um ‘vetor de caracteres’

Com a adição de um caracter nulo, ‘\0’ Strings C agem como vetores

Não podem ser atribuídos nem comparados como variáveis simples

Biblioteca <cctype> e <string> têm funções muito úteis para manipular strings

cin.get() lê o próximo caracter simples Versões de getline() permitem a leitura da linha inteira Objects Classe string comportam-se melhor que

strings C