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”); }