Logo Passei Direto
Buscar

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Cadeias de Caracteres (strings) e Estruturas
Heterogêneas (structs)
Programação de Computadores I
Emiliana Mara Lopes Simões
simoes.eml@gmail.com
Universidade Federal de Ouro Preto
novembro 2009
Cadeias de Caracteres (strings)
Em C++ temos o tipo de dados string que oferece várias
facilidades para o tratamento de cadeias de caracteres
No estilo C++, os strings são criados facilmente através da
biblioteca padrão referenciada pelo arquivo de cabeçalho
<string>
Para declarar um string basta colocar:
string nome_variavel;
Cadeias de Caracteres (strings)
Exemplo 1: Leitura de um nome passado pelo usuário e, em
seguida, a sua impressão.
#include <iostream>
#include <string>
using namespace std;
main(){
string nome;
cout<<“Digite um nome: ”;
cin>>nome;
cout<<“\nO nome digitado foi: ”<<nome<<endl;
system(“pause”);
}
Cadeias de Caracteres (strings)
Quando cin encontra um espaço em branco, todos os
caracteres após este espaço são ignorados
Por exemplo, se no programa anterior o usuário digitar o nome
Maria Bonita, apenas o primeiro nome (Maria) seria
armazenado na variável nome
Como resultado, erroneamente seria impresso na tela:
O nome digitado foi: Maria
Cadeias de Caracteres (strings)
Dessa forma, cin não é o método recomendado para ler frases
inteiras, com palavras separadas por espaços
A função getline(...) lê linhas inteiras de entrada através do
teclado, sem se importar com os espaços em branco. A sua
sintaxe é:
getline( cin, <nome da string> );
Assim, getline(...) recebe todos os caracteres (incluindo os
espaços em branco) digitados pelo usuário, até que ele aperte
a tecla Enter
Cadeias de Caracteres (strings)
Exemplo 2: Alteração do exemplo 1, para que seja possível a
leitura de nomes compostos
#include <iostream>
#include <string>
using namespace std;
main(){
string nome;
cout<<“Digite um nome: ”;
getline(cin, nome);
cout<<“\nO nome digitado foi: ”<<nome<<endl;
system(“pause”);
}
Cadeias de Caracteres (strings)
Um valor constante de string é definido entre aspas duplas
#include <iostream>
#include <string>
using namespace std;
main(){
string nome = “Fulano de Tal”;
cout<<“\nO nome eh: ”<<nome;
system(“pause”);
}
Saída:
O nome eh: Fulano de Tal
Cadeias de Caracteres (strings)
Um tipo de dados string em C++ pode ser visto como um
“vetor inteligente” de caracteres. Assim, uma string suporta
o acesso indexado de forma natural
#include <iostream>
#include <string>
using namespace std;
main(){
string str = “naturesa”;
str[6] = ’z’;
cout<<str;
system(“pause”);
}
Saída: natureza
Cadeias de Caracteres (strings)
C++ possui uma série de funções e operações próprias para
strings. A tabela abaixo resume as operações mais utilizadas
(sejam s, s1 e s2 strings):
Função Descrição
s.empty() retorna true se a string está vazia, e false caso contrário
s.size() retorna o tamanho da string (em caracteres)
s.length() retorna o tamanho da string (em caracteres)
s[n] Acessa o caracter da posição n da string
s1 + s2 concatena duas strings
s1 = s2 atribui o conteúdo de s2 à string s1
s1 == s2 retorna true se s1 for igual a s2, e false caso contrário
Obs: Duas strings são consideradas iguais se elas tiverem o mesmo número de
caracteres e seus caracteres forem iguais.
Estruturas Heterogêneas (structs)
vetor: Coleção de valores do mesmo tipo
Estrutura (struct): Coleção de valores que podem ser de tipos
diferentes
Uma estrutura é tratada como um único item, assim como
vetores
Principal diferença: Deve-se primeiro “definir” struct antes
de declarar quaisquer variáveis
Estruturas Heterogêneas (structs)
vetor: Coleção de valores do mesmo tipo
Estrutura (struct): Coleção de valores que podem ser de tipos
diferentes
Uma estrutura é tratada como um único item, assim como
vetores
Principal diferença: Deve-se primeiro “definir” struct antes
de declarar quaisquer variáveis
Estruturas Heterogêneas (structs)
Definição: Exemplo de definição de um novo tipo struct
chamado Data
struct Data{
//Tipos e nomes dos membros
string mes;
int dia;
int ano;
};
Estruturas Heterogêneas (structs)
Normalmente estruturas são definidas globalmente
A definição da estrutura não reserva nenhum espaço na
memória. Apenas cria um novo tipo de dados que é
utilizado para declarar variáveis
struct Data{
//Tipos e nomes dos membros
string mes;
int dia;
int ano;
};
Estruturas Heterogêneas (structs)
Com o tipo de estrutura definido, pode-se declarar variáveis
deste tipo exatamente como se declara tipos simples
Exemplo:
struct Data{
//Tipos e nomes dos membros
string mes;
int dia;
int ano;
};
main(){
//Declara a variável dataNascimento do tipo Data
Data dataNascimento;
}
Estruturas Heterogêneas (structs)
É utilizado o operador ponto para acessar os membros
Exemplo:
main(){
//Declara a variável dataNascimento do tipo Data
Data dataNascimento;
dataNascimento.mes = “Julho”;
dataNascimento.dia = 1;
dataNascimento.ano = 1970;
}
Estruturas Heterogêneas (structs)
Exemplo 1: Cadastro de alunos
#include <iostream>
#include <string>
using namespace std;
struct Aluno{
//Tipos e nomes dos membros
string nome;
string matricula;
int idade;
};
Estruturas Heterogêneas (structs)
main(){
Aluno a1, a2;
a1.nome = “Joao dos Santos”;
a1.matricula = “01.2.1243”;
a1.idade = 30;
a2.nome = “Maria da Silva”;
a2.matricula = “09.1.9845”;
a2.idade = 19;
...
Estruturas Heterogêneas (structs)
...
cout<<a1.nome<<“ ”
<<a1.matricula<<“ ”
<<a1.idade<<endl;
cout<<a2.nome<<“ ”
<<a2.matricula<<“ ”
<<a2.idade<<endl;
system(“pause”);
}
Estruturas Heterogêneas (structs)
Exemplo 2: Inserir uma lista de n filmes. A estrutura para os
filmes deve conter os seguintes campos: nome e o ano de
lançamento.
#include <iostream>
#include <string>
using namespace std;
struct Filme{
//Tipos e nomes dos membros
string nome;
int ano;
};
Estruturas Heterogêneas (structs)
main(){
int n;
cout<<“Insira o numero de filmes: ”;
cin>>n;
Filme f[n];
for(int i=0; i < n; i++){
cout<<“\nInsira o nome e ano do filme: ”;
cin>>f[i].nome>>f[i].ano;
}
...
Estruturas Heterogêneas (structs)
...
cout<<“\nDados dos filmes cadastrados: ”<<endl;
for(int i=0; i < n; i++){
cout<<“Filme ”<<i+1<<endl
<<“Nome: ”<<f[i].nome<<endl
<<“Ano: ”<<f[i].ano<<endl<<endl;
}
system(“pause”);
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?