pearson education slide 1. pearson education slide 2 cap í tulo 9 criado por frederick h....
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