pearson education slide 1. pearson education slide 2 cap í tulo 9 criado por frederick h....

Post on 16-Apr-2015

108 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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)

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

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

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

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’};

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

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!

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

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!

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.”;

Pearson Education Slide 14

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

manipulação de stings

Painel 9.1 página 245

Pearson Education Slide 15

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

manipulação de stings

Painel 9.1 página 246

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

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!

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

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!

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!

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”

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

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

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

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’!

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’:

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’

Pearson Education Slide 28

Funções de Manipulação de Caracteres

Painel 9.3 página 255

Pearson Education Slide 29

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

Painel 9.3

página 256

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!

Pearson Education Slide 31

Programa Usando a Classe StringPainel 9.4 página 259

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”

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

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;

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

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

Pearson Education Slide 37

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

Página 9.7página 265

Pearson Education Slide 38

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

Página 9.7 página 266

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

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

top related