Cap - PowerPoint PPT Presentation

1 / 40
About This Presentation
Title:

Cap

Description:

Cap tulo 9 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 ... – PowerPoint PPT presentation

Number of Views:64
Avg rating:3.0/5.0
Slides: 41
Provided by: FredC156
Category:
Tags: cap | templates

less

Transcript and Presenter's Notes

Title: Cap


1
(No Transcript)
2
Capítulo 9
Strings
Criado por Frederick H. Colclough, Colorado
Technical University
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

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)

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

6
Variável String C
  • Vetor de caractereschar s10
  • 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

7
Armazenamento String C
  • Um vetor com tipo-base charchar s10
  • Se s contém a string Oi, mamãe!, ela é
    armazenada
  • como

Painel página 242
8
Inicialização de uma String C
  • Pode-se inicializar uma string Cchar
    minhaMensagem20 Oi você aí.
  • Não é necessário preencher o vetor inteiro
  • Inicialização coloca \0 no final
  • Pode-se omitir o tamanho do vetorchar
    stringCurta abc
  • A variável string C receberá o tamanho do
  • comprimento da string C mais um.
  • NÃO comochar stringCurta a, b, c

9
Índices de uma String C
  • Uma string C é um vetor
  • Pode-se acessar variáveis indexadas dechar
    nossaString5 Oi
  • nossaString0 é O
  • nossaString1 é i
  • nossaString2 é \0
  • nossaString3 é desconhecido
  • nossaString4 é desconhecido

10
Manipulação de Índices de uma String C
  • Pode-se manipular as variáveis indexadaschar
    felizString7 "LaRaRa"
  • felizString6 Z
  • Cuidado!
  • Aqui, \0 (nulo) foi sobrescrito por um Z!
  • Se nulo foi sobrescrito, string C não agemais
    como uma string C!
  • Resultados Imprevisíveis!

11
Biblioteca
  • Declarando strings C
  • Não requer nenhuma biblioteca C
  • Predefinição de C
  • Manipulações
  • Requerem a Biblioteca ltcstringgt
  • Incluída quando estiver usando strings C
  • Geralmente necessária para a diversão com elas

12
e com strings C
  • strings C não são como outra variáveis
  • Não se pode atribuir ou compararchar
    umaString10umaString Olá // ILEGAL!
  • Pode-se somente usar na declaração de uma
    string C!
  • Deve-se usar uma função da biblioteca para
    atribuiçõesstrcpy(umaString, Olá)
  • Função predefinida (em ltcstringgt)
  • Torna o valor de umaString igual a Olá
  • Nenhum controle de tamanho!
  • O programador deve controlar, exatamente como em
    outros vetores!

13
Comparando strings C
  • Também não se pode usar o operador char
    umaString10 Oláchar outraString10
    Até logo
  • umaString outraString // NÃO permitido!
  • Deve-se usar uma função da biblioteca
    novamenteif (strcmp(umaString, outraString))
    cout ltlt As strings não são iguais.else cout
    ltlt As strings são iguais.

14
A Biblioteca ltcstringgt
  • Cheia de funções de manipulação de stings

Painel 9.1 página 245
15
A Biblioteca ltcstringgt (cont)
  • Cheia de funções de manipulação de stings

Painel 9.1 página 246
16
Funções String C strlen()
  • Freqüentemente usado para saber o
  • comprimento da stringchar minhaString10
    LaRaRacout ltlt strlen(minhaString)
  • Retorna o número de caracteres
  • Não incluindo o caractere nulo
  • Resultado 6

17
Funções String C strcat()
  • strcat()
  • Concatenação de Stringchar varString20 "O
    rato"
  • strcat(varString, "roeu")
  • Observe o resultadovarString agora contém O
    ratoroeu
  • Cuidado!
  • Incorpore os espaços quando necessário!

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

19
Saída de String C
  • Strings C podem ser enviadas para a
  • saída com o operador de inserção, ltlt.
  • Como nós já temos feitocout ltlt notícia ltlt
    UAU.\n
  • Onde notícia é uma variável string C
  • Possível porque o operador ltlt ésobrecarregado
    para strings C!

20
Entrada para String C
  • É possível preencher uma variável string C
  • por meio do operador de entrada gtgt
  • 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!

21
Exemplo de Entrada para String C
  • char a80, b80cout ltlt Digite alguma
    coisa\ncin gtgt a gtgt bcout ltlt a ltlt b ltlt 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

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 a80cout ltlt Digite alguma
    coisa\ncin.getline(a, 80)cout ltlt a ltlt FIM
    DA ENTRADA\n
  • DiálogoDigite alguma coisa La ra ra para
    você! La ra ra para você!FIM DA ENTRADA

23
Mais Sobre getline()
  • Pode-se explicitamente informar o tamanho que
    será recebidochar stringCurta5cout ltlt
    Digite alguma coisa\ncin.getline(stringCurta,
    5)cout ltlt stringCurta ltlt FIM DA ENTRADA\n
  • Resulta emDigite alguma coisa
    larararamlaraFIM DA ENTRADA
  • Força a leitura de somente QUATRO caracteres
  • É necessário lembrar do caracter nulo

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

25
Função-membro get()
  • Lê um caractere de cada vez
  • Função-membro do objeto cinchar
    proximoSimbolocin.get(proximoSimbolo)
  • Lê o próximo caractere e coloca-o na
    variávelproximoSimbolo
  • O argumento deve ser um tipo char
  • Não uma string!

26
Função-membro put()
  • Apresenta um caracter de cada vez
  • Função-membro do objeto cout
  • Exemploscout.put(a)
  • Apresentará como saída na tela a letra a
  • char minhaString10 Olácout.put(minhaStrin
    g1)
  • Apresentará como saída na tela a letra l

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

28
Funções de Manipulação de Caracteres
Painel 9.3 página 255
29
Funções de Manipulação de Caracteres (cont)
Painel 9.3 página 256
30
Classe-Padrão string
  • Definida na Bibliotecainclude ltstringgtusing
    namespace std
  • Variáveis String e Expressões
  • Tratadas como tipos simples
  • Pode-se atribuir, comparar, adicionarstring s1,
    s2, s3s3 s1 s2 //Concatenaçãos3 Olá
    mamãe! //Atribuição
  • Note que a string C Olá mamãe! foi
    automaticamenteconvertida para o tipo string!

31
Programa Usando a Classe String
Painel 9.4 página 259
32
E/S com a Classe string
  • Exatamente como em outros tipos!
  • string s1, s2cin gtgt s1cin gtgt s2
  • ResultaSe o usuário digitarQue os pêlos dos
    seus dedos do pé fiquem longos e encaracolados!
  • A extração ainda ignora os espaços em brancos1
    recebe o valor Ques2 recebe o valor os

33
getline() com a Classe string
  • Para linhas completasstring linha
  • cout ltlt "Digite uma linha de entrada\n"
  • getline(cin, linha)
  • cout ltlt linha ltlt "FIM DA ENTRADA\n"
  • Diálogo produzidoDigite alguma coisa
  • La ra ra para você!
  • La ra ra para você!FIM DA ENTRADA
  • Semelhante ao uso de getline() com strings C

34
Outras Versões de getline()
  • Pode-se especificar o caracter delimitadorstri
    ng linha
  • cout ltlt "Digite alguma coisa\n"
  • getline(cin, linha, ?)
  • Recebe a entrada até que ? seja encontrado
  • getline() retorna uma referência
  • string s1, s2getline(cin, s1) gtgt s2
  • Resulta em (cin) gtgt s2

35
Armadilha Misturando Métodos de Entrada
  • Cuidado ao misturar cin gtgt variável and getline
  • int nstring linhacin gtgt ngetline(cin,
    linha)
  • Se a entrada for 42 Olá mochileiro.
  • A variável n recebe realmente 42
  • linha é fixado como igual à string vazia!
  • cin gtgt n ignorou os espaços em branco,
    deixando\n para a próxima entrada para
    getline()!

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

37
Funções-membros da classe-padrão string
Página 9.7 página 265
38
Funções-membros da classe-padrão string (cont)
Página 9.7 página 266
39
Conversão entre Objetos String e Strings C
  • Conversões automáticas de tipos
  • de string C para objeto stringchar 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ícitastrcpy(umaStringC,
    variavelString.c_str( ))

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 ltcctypegt e ltstringgt 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
    questrings C
Write a Comment
User Comments (0)
About PowerShow.com