Buscar

Vetores e Literais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
C++
Vetores e Literais
Osmar de Oliveira Braz Junior
2
Objetivos
◼ Assuntos a serem abordados nesta apresentação
 Declaração, Acesso e Recuperação
 Vetores de Tipos Primitivos Estáticos e Dinâmicos
 Vetores de TAD Estáticos e Dinâmicos
 Vetores Bidimensionais
 Vetores Multidimensionais
 Manipulação de Literais
 Classe string
3
Vetores
◼ Vetores são coleções de tipos primitivos ou 
TAD e podem ser declarados de forma 
estática ou dinâmica.
Os tipos devem ser conversíveis ao tipo em que 
foi declarado o vetor
Um vetor de inteiros só pode receber inteiros.
Pois o um vetor é uma variável composta 
homogênea.
4
Vetores
◼ Vetores são declarados colocando [] depois 
do nome do identificador.
◼ Sintaxe de declaração:
int vetor[4];
◼ Atribuindo valores:
vetor[1] = 10;
◼ Recuperando valores:
int x = vetor[1];
5
Percorrendo Vetores
◼ Existem algumas formas de acesso ao 
conteúdo e endereços de um vetor.
◼ Acesso aos conteúdos
Pelo índice
Pelo endereço
◼ Acesso aos endereços
Por referência ao índice
Calculando devido a contiguidade
6
Percorrendo Vetores
◼ Lembre-se um vetor é uma variável 
contígua, portanto todos os valores estão 
alocados sequencialmente em memória.
int vetor[] = {10,20,30,40};
vetor
0
10
1
20
2
30
3
40
7
Percorrendo Vetores pelo Índice
◼ E de costume percorrer um vetor utilizando 
um laço e uma variável inteira para acessar 
os índices e o conteúdo de suas posições.
int vetor[] = {10,20,30,40};
for(int i = 0; i < 4; i++){
cout << "vetor["<<i<<"]=" << vetor[i] << endl;
}
8
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main(int argc, char *argv[]) {
int vetor[] = {10,20,30,40}; 
cout << "Acesso ao conteudo Vetor por Indice" << endl; 
for(int i =0; i < 4; i++){
cout <<"Vetor["<<i<<"]=" << vetor[i] << endl;
} 
return EXIT_SUCCESS;
}
Percorrendo Vetores pelo Índice
Usa [i] para acessar uma posição do vetor.
9
Percorrendo Vetores por Endereços
◼ Considere o vetor:
int vetor[] = {10,20,30,40};
cout << vetor[0]; //Saída 10
cout << *(vetor); //Saída 10
◼ Um nome de vetor é simplesmente um ponteiro.
◼ Isto ocorre porque o endereço de vetor[0] é o mesmo 
que vetor, e vetor[1] é o mesmo que vetor+1 e assim 
por diante.
◼ Só é necessário acessar o conteúdo pelo manipulador de 
ponteiros *.
10
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main(int argc, char *argv[]) {
int vetor[] = {10,20,30,40}; 
cout << "Acesso ao conteudo Vetor por Endereco" << endl; 
for(int i =0; i < 4; i++){
cout <<"Vetor["<<i<<"]=" << *(vetor + i) << endl;
} 
return EXIT_SUCCESS;
}
Percorrendo Vetores por Endereços
Usa “*” para acessar a posição do 
vetor e o tamanho de um inteiro.
11
Exemplo Percorrendo Vetor
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main() {
int vet[5]; //Declaração do vetor
vet[0]=10; vet[1]=20; vet[2]=30; vet[3]=40; vet[4]=50; 
cout << ">> Acesso ao Conteudo 1" << endl; 
for(int i =0; i < 5; i++){
cout << "Vetor=" << vet[i] << endl;
}
cout << ">> Acesso ao Conteudo 2" << endl; 
cout << "===================" << endl;
for(int i =0; i < 5; i++){
cout << "Vetor=" << *(vet + i) << endl;
}
cout << ">> Acesso aos Enderecos 1" << endl; 
for(int i =0; i < 5; i++){
cout << "Vetor=" << &vet[i] << endl;
} 
cout << ">> Acesso aos Enderecos 2" << endl; 
cout << "vet=" << &vet << endl;
for(int i =0; i < 5; i++){
cout << "Vetor=" << (vet+i) << endl;
}
return EXIT_SUCCESS;
}
12
Inicialização de Vetores
◼ Vetores podem ser inicializados no 
momento em que são criados. Isto já define 
o tamanho do vetor.
◼ Sintaxe com especificação de tamanho:
int vetor[4] = {10,20,30,40};
◼ Sintaxe sem especificação de tamanho:
int vetor[] = {10,20,30,40};
13
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main(int argc, char *argv[]) {
//Com ou sem especificação do tamanho
int vetor[] = {10,20,30,40}; 
cout << ">> Acesso ao Conteudo Vetor" << endl; 
for(int i =0; i < 4; i++){
cout << "Vetor[" << i << "]=" << vetor[i] << endl;
} 
return EXIT_SUCCESS;
}
Exemplo Inicialização de Vetor
14
Percorrendo Vetores - Cuidados
◼ Em algumas linguagens o acesso(leitura e 
escrita) a posições além do limites 
declarados em um vetor é controlado e 
restringido pela própria linguagem.
◼ Em C++ este cuidado deve ser feito pelo 
programador.
15
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std; 
const int TAMANHO = 5;
int main() {
double vetor[TAMANHO];
for(int i =0; i < TAMANHO; i++){
vetor[i] = i;
} 
cout << "Listando vetor" << endl;
for(int i =0; i < TAMANHO+TAMANHO; i++){
cout << vetor[i] << endl;
} 
return EXIT_SUCCESS;
}
Percorrendo Vetores - Cuidados
Percorre além do 
tamanho definido 
no vetor!
16
Declaração e alocação de Vetores
◼ Vetores podem ser declarados a partir de
Tipos primitivos
TAD
◼ Vetores podem ser alocados de duas formas
Estático
Dinâmico
17
Vetores de Tipos Primitivos
◼ Estáticos
Memória para alocação de variáveis criadas no 
inicio do programa.
Uma vez criado ocupam este espaço até o final 
do programa.
18
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
const int TAMANHO = 5;
int main(int argc, char *argv[]) {
int matricula[TAMANHO];
double media[TAMANHO];
for(int i = 0; i < TAMANHO; i++) {
cout << "Digite a matricula:"; 
cin >> matricula[i];
cout << "Digite a media:"; 
cin >> media[i];
}
for(int i = 0; i < TAMANHO; i++) {
if (media[i] >= 7) {
cout << "O aluno de matricula " 
<< matricula[i] << " = > Aprovado: " << media[i] << endl;
} else {
cout << "O aluno de matricula " << matricula[i] 
<< " = > Reprovado: " << media[i] << endl;
}
} 
return EXIT_SUCCESS;
}
Exemplo Vetor Primitivo Estático
19
Vetores de Tipos Primitivos
◼ Dinâmicos
Memória para alocação de variáveis criadas 
dinamicamente
Usando operador new.
20
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
const int TAMANHO = 5;
int main(int argc, char *argv[]) {
int* matricula[TAMANHO];
double* media[TAMANHO];
for(int i = 0; i < TAMANHO; i++) {
cout << "Digite a matricula:"; 
matricula[i] = new int;
cin >> *matricula[i];
cout << "Digite a media:"; 
media[i] = new double;
cin >> *media[i];
}
for(int i = 0; i < TAMANHO; i++) {
if (*media[i] >= 7) {
cout << "O aluno de matricula " << *matricula[i] 
<< " = > Aprovado: " << *media[i] << endl;
} else {
cout << "O aluno de matricula " << *matricula[i] 
<< " = > Reprovado: " << *media[i] << endl;
}
} 
return EXIT_SUCCESS;
}
Exemplo Vetor Primitivo Dinâmico
Instância uma posição do tipo inteiro 
para armazenar o dado.
Usa o * para acessar o conteúdo criado.
21
Vetores de TAD
◼ Estático
Memória para alocação de variáveis criadas no 
inicio do programa.
Necessário uma estrutura para agrupar os tipos 
primitivos ou outros TAD
Acesso aos membros por “.” 
22
Exemplo Vetor TAD Estático
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
const int TAMANHO = 5;
struct Aluno {
int matricula;
double media;
};
int main(int argc, char *argv[]) { 
Aluno aluno[TAMANHO];
for(int i = 0; i < TAMANHO; i++) {
cout << "Digite a matricula:"; 
cin >> aluno[i].matricula;
cout << "Digite a media:"; 
cin >> aluno[i].media;
}
for(int i = 0; i < TAMANHO; i++) {
if (aluno[i].media >= 7) {
cout << "O aluno de matricula " << aluno[i].matricula 
<< " = > Aprovado: " << aluno[i].media << endl;
} else {
cout << "O aluno de matricula " << aluno[i].matricula 
<< " = > Reprovado: " << aluno[i].media << endl;
}
}
return EXIT_SUCCESS;
}
Acesso aos membros da estrutura 
com o uso do ponto “.”
23
Vetores de TAD
◼ Dinâmico
Memória para alocação de variáveis criadas 
dinamicamenteUsando operador new.
Acesso aos menbros da estrutura por:
◼ ->
◼ (*ponteiro).
24
Exemplo Vetor TAD Dinâmico
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
const int TAMANHO = 5;
struct Aluno {
int matricula;
double media;
};
int main(int argc, char *argv[]) {
Aluno* aluno[TAMANHO];
for(int i = 0; i < TAMANHO; i++) {
cout << "Digite a matricula:"; 
aluno[i] = new Aluno;
cin >> (*aluno[i]).matricula;
cout << "Digite a media:"; 
cin >> aluno[i]->media;
}
for(int i = 0; i < TAMANHO; i++) {
if (aluno[i]->media >= 7) {
cout << "O aluno de matricula " << aluno[i]->matricula << " = > Aprovado: " 
<< aluno[i]->media << endl;
} else {
cout << "O aluno de matricula " << (*aluno[i]).matricula 
<< " = > Reprovado: " << (*aluno[i]).media << endl;
}
} 
return EXIT_SUCCESS;
}
Acesso aos membros da estrutura com o 
uso do ponto “.” a partir do conteúdo 
criado com o uso do “*”.
25
Vetores Bidimensionais
◼ Vetores bidimensionais em C++ são vetores de vetores, 
também conhecidos por Matriz.
 No exemplo abaixo temos uma matriz de ordem 3x2 de valores 
inteiros.
 Para inicializar uma matriz de ordem 3x2 basta especificar os 
exemplos linha a linha
int matriz[3][2];
int matriz[3][2] = {
{10,20},
{30,40},
{50,60}
};
j
10 20
i 30 40
50 60
26
Vetores Bidimensionais = Matriz
Coluna 0 Coluna 1
Linha 0 m[0][0] m[0][1]
Linha 1 m[1][0] m[1][1]
Linha 2 m[2][0] m[2][1]
int matriz[3][2];
27
Inicialização de Matrizes
◼ Matrizes podem ser inicializados no 
momento em que são criados mas é 
necessário especificar as dimensões exceto 
a primeira.
◼ Sintaxe:
int matriz[2][2] = {{10,20},{30,40}};
ou
int matriz[][2]= {{10,20},{30,40}};
28
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main(int argc, char *argv[]) {
//Todas precisam de tamanho exceto a primeira
int matriz[][2] = {{10,20},{30,40}}; 
cout << ">> Acesso ao Conteudo Matriz" << endl; 
for(int i =0; i < 2; i++){
for(int j =0; j < 2; j++){
cout << "Matriz[" << i << "," << j << "]=" 
<< matriz[i][j] << endl;
}
} 
return EXIT_SUCCESS;
}
Exemplo Inicialização de Matriz
29
Vetores multidimensionais
◼ Vetores multidimensionais também são 
vetores de vetores.
É possível criar toda a hierarquia (vetor de vetor 
de vetor...), para fazer vetores retangulares ...
int prisma[3][2][2];
30
Literais
◼ Literais ou strings são vetores de chars.
 Nada mais e nada menos. 
◼ As strings são o uso mais comum para os vetores. 
◼ Devemos apenas ficar atentos para o fato de que 
as strings têm o seu último elemento como um '\0'. 
◼ Literais são delimitadas por aspas duplas “”.
◼ Caracteres são delimitadas por aspas simples ‘’.
◼ A declaração geral para uma string é: 
 char nome_literal[tamanho];
31
Literais
◼ Alocação de vetor de char
char nome[50] = "CASA";
nome
0
'C'
1
'A'
2
'S'
3
'A'
4
'\0'
32
Exemplo Vetor Char
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main(int argc, char *argv[]) { 
char nome[10]= "CASA"; //char nome[]= "CASA";
int i = 0;
while (nome[i] != '\0') {
cout << "Letra[" << i << "]=" << nome[i] << endl;
i = i + 1;
}
return EXIT_SUCCESS;
}
33
Literais
◼ Devemos lembrar em uma string esta incluído o 
'\0' final. 
◼ A biblioteca padrão do C possui diversas funções 
que manipulam strings estas bibliotecas são 
semelhantes ao C++.
◼ Estas funções são úteis pois não se pode, por 
exemplo, igualar(comparar) duas strings: 
string1==string2; /* NAO funciona */
34
Exemplo Leitura Literal com espaços
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main(int argc, char *argv[]) { 
char nome[50];
cout << "Digite seu nome:"; 
cin >> nome; //digite um literal com espaços
cout << "Seu nome e " << nome;
return EXIT_SUCCESS;
}
◼ A função gets() lê uma string do teclado. 
Sua forma geral é: 
◼ Preenche automaticamente com "/0" ao 
final do literal.
◼ Não limita a quantidade de caracteres lido.
gets(nome_da_string); 
35
gets
36
Exemplo gets
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main(int argc, char *argv[]) { 
char nome[50];
cout << "Digite seu nome:"; 
gets(nome); //digite um literal com espaços
cout << "Seu nome e " << nome;
return EXIT_SUCCESS;
}
37
Problemas com Buffer(stdin)
◼ Algumas vezes o buffer de entrada de dados(stdin) 
acumula caracteres.
◼ Isto gera lixo para a próxima leitura de um literal.
◼ Para resolver o problema limpe o buffer antes de 
ler um novo literal.
char nome[50];
cout << "Digite o nome: ";
fflush(stdin);
gets(nome);
38
Exemplo fflush
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main(int argc, char *argv[]) { 
char palavra1[10], palavra2[10];
cout << "Digite palavra1:"; 
gets(palavra1);
int x;
cout << "Digite um valor inteiro:"; 
cin >> x;
cout << "Digite palavra2:"; 
//fflush(stdin); //Execute a primeira vez comentando a linha
gets(palavra2);
cout << "Palavra1 : " << palavra1 << endl;
cout << "Palavra2 : " << palavra2 << endl;
return EXIT_SUCCESS;
}
◼ Para resolver o problema da função gets()
que não possui limite de tamanho use a 
função fgets() que lê uma string do teclado 
com uma tamanho fixo. Sua forma geral é: 
◼ Necessário especificar o tamanho da string a 
ser lida e de onde deve ser lido, no caso do 
buffer padrão stdin.
fgets(nome_da_string, tamanho, stdin); 
39
fgets
40
Exemplo fgets
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
#define TAMSTR 10 //Define o tamanho da string
int main(int argc, char *argv[]) { 
char nome[TAMSTR];
cout << "Digite seu nome:";
fflush(stdin); 
fgets(nome, TAMSTR, stdin); 
cout << "Seu nome e " << nome;
return EXIT_SUCCESS;
}
Leitura de até 
10(TAMSTR) 
caracteres a partir do 
buffer padrão stdin.
41
Copiando Literais - strcpy
◼ Como um literal é um vetor de char não é possível 
copiar uma variável literal para outra variável sem 
percorrer todo o vetor.
◼ Sua forma geral é: 
strcpy (string_destino,string_origem); 
◼ A função strcpy() copia a string-origem para a 
string-destino.
42
Exemplo strcpy
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
char str1[50], str2[50];
cout << "Digite str1:"; 
gets(str1);
strcpy(str2,str1);
cout << "str2:" << str2;
return EXIT_SUCCESS;
}
43
Concatenando Literais - strcat
◼ A função strcat() tem a seguinte forma geral: 
strcat (string_destino,string_origem); 
◼ A string de origem permanecerá inalterada e será 
anexada ao fim da string de destino. 
44
Exemplo strcat
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
char str1[50], str2[50];
cout << "Digite str1:"; 
gets(str1);
cout << "Digite str2:"; 
gets(str2);
strcat(str1,str2);
cout << "str1:" << str1;
return EXIT_SUCCESS;
}
45
Tamanho de Literais - strlen
◼ A função strlen() tem a seguinte forma geral: 
strlen(string); 
◼ A função strlen() retorna um inteiro com o 
comprimento da string fornecida. O terminador 
nulo não é contado. Isto quer dizer que, de fato, o 
comprimento do vetor da string deve ser um a mais 
que o inteiro retornado por strlen(). 
46
Exemplo strlen
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
char str1[50];
cout << "Digite str1:"; 
gets(str1);
cout << "str1:" << strlen(str1);
return EXIT_SUCCESS;
}
47
Comparando Literais - strcmp
◼ A função strcmp() tem a seguinte forma geral: 
strcmp (string1, string2); 
◼ A função strcmp() comparaa string1 com a 
string2. Se as duas forem idênticas a função 
retorna zero. Se elas forem diferentes a função 
retorna não-zero.
48
Exemplo 1 strcmp
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
char str1[50], str2[50];
cout << "Digite str1:"; 
gets(str1); 
cout << "Digite str2:"; 
gets(str2);
cout << "Comparacao str1 e str2:" << strcmp(str1,str2);
return EXIT_SUCCESS;
}
49
Exemplo 2 strcmp
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
char nome1[50] = "abc";
char nome2[50] = "ABC";
cout << "Nome1:" << nome1 << " / Nome2:" << nome2 << endl;
cout << "strcmp(nome1,nome2):" << strcmp(nome1,nome2) << endl;
if (strcmp(nome1,nome2)==0)
cout << "Nome1 e igual a Nome2" << endl;
else
cout << "Nome1 e diferente de Nome2" << endl;
if (strcmp(nome1,nome2)<0)
cout << "Nome1 maior que Nome2" << endl;
if (strcmp(nome1,nome2)>0)
cout << "Nome1 menor que Nome2" << endl; 
return EXIT_SUCCESS;
}
• Valor menor que 0(-1) 
se nome1 é maior que 
nome2.
• Valor maior que 0(1) 
se nome1 é menor que 
nome2.
50
char* - Conversão
◼ A entrada dos dados muitas vezes é feita como 
vetor de char(* char), e para realizar operações 
matemáticas é necessário converter para o tipo 
numérico específico. (cstdlib)
 int atoi (const char* str);
◼ Converter char* em int
 double atof (const char* string );
◼ Converter char* em double
 atol, atoll
Herdadas do C
51
char* - Conversão
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS atoi, atof
using namespace std;
int main(int argc, char *argv[]) { 
char charint[] = "10";
char charfloat[] = "15.5";
cout << "charint:" << charint << endl; 
int rint = atoi(charint) + 10;
cout << "rint:" << rint << endl; 
cout << "charfloat:" << charfloat << endl; 
float rfloat = atof(charfloat) + 10;
cout << "rfloat:" << rfloat << endl; 
return EXIT_SUCCESS;
}
52
Vetores de Literais
◼ Vetores de literais são na realidade são 
matrizes bidimensionais de char.
char palavras[10][100]; 
◼ Nesta declaração temos uma matriz 
chamada palavras de 10 literais onde cada 
literal pode ter até 100 caracteres.
53
Vetores de Literais
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
using namespace std;
int main() {
char palavras[10][100];
cout << "Lendo palavras" << endl;
for(int i =0; i < 10; i++){
cout << "Palavra[" << i << "]=";
fflush(stdin);
gets(palavras[i]); 
}
cout << "Listando palavras" << endl;
for(int i =0; i < 10; i++){
cout <<"Palavra[" << i << "]=" << palavras[i] << endl;
}
return EXIT_SUCCESS;
}
54
string
◼ Encapsula um vetor de char e suas operações de 
manipulação
◼ Fornece suporte para esses objetos com uma 
interface semelhante à de um contêiner padrão de 
bytes, mas adicionando recursos projetados 
especificamente para operar com strings de 
caracteres de byte único. 
◼ Para utilizá-la é necessário o seguinte
#include <cstring>
55
string Métodos Principais
◼ size_type size() const
 Retorna o tamanho da string
◼ size_type length() const
 Retorna o tamanho da string (sobrecarga do método Retorna o tamanho da string (sobrecarga do método size)
◼ bool empty() const
 Retorna true, caso a string esteja vazia
◼ string substr(size_type pos, size_type n) const
 Retorna uma string com n caracteres, iniciando na posição pos
◼ size_type find(const string& str, size_type pos) const
 Retorna a posição de inicio, caso a string str esteja inserida no objeto
◼ size_type copy(string *s, size_type n, size_type pos) const
 Copia até n elementos da string s, iniciando na posição pos do objeto
◼ string& insert(size_type pos, const string *s)
 Insere a partir da posição pos a string s
56
string Operadores
◼ O operador + pode ser utilizado para concatenar dois 
objetos da classe string
string s1("C++ "), s2("Orientado a Objetos"); 
s1 = s1 + s2; 
//s1 contém "C++ Orientado a Objetos" 
◼ O operador = (atribuição) pode ser utilizado com os objetos 
da classe string 
string s1("C++ "), s2; 
s2 = s1 //contém "C++ "
◼ Estes operadores não estão disponíveis para a string nativa 
do C/C++ (char*) 
57
string - Leitura
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
string nome;
cout << "Digite seu nome:";
getline(cin,nome); //digite um literal com espaços
//cin armazena toda a string(linha) 
cout << "Seu nome e " << nome;
return EXIT_SUCCESS;
}
58
string - Comparação
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
string str1, str2;
cout << "Digite str1:"; 
getline(cin, str1);
cout << "Digite str2:"; 
getline(cin, str2);
cout << "Comparacao str1 e str2:" 
<< (str1 == str2);
return EXIT_SUCCESS;
}
59
string - Cópia
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
string str1, str2;
cout << "Digite str1:"; 
getline(cin,str1);
str2 = str1;
cout << "str2:" << str2;
return EXIT_SUCCESS;
}
60
string - Tamanho
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
string str1;
cout << "Digite str1:"; 
getline(cin,str1);
cout << "str1:" << str1.length();
return EXIT_SUCCESS;
}
61
string – Conversão
◼ A entrada dos dados muitas vezes é feita como 
string, e para realizar operações matemáticas é 
necessário converter para o tipo numérico 
específico. (string)
 int stoi (const string *str);
◼ Converter string em int
 float stof (const string *str);
◼ Converter string em float
 stol, stoll, stoul, strtol
 stod, stold
GNU C++ 11
Projeto->Opções do Projeto
62
string – Conversão
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
string strint = "10";
string strfloat = "15.5";
cout << "strint:" << strint << endl; 
int rint = stoi(strint) + 10;
cout << "rint:" << rint << endl; 
cout << "strfloat:" << strfloat << endl; 
float rfloat = stof(strfloat) + 10;
cout << "rfloat:" << rfloat << endl; 
return EXIT_SUCCESS;
}
63
Conversão - string
◼ As vezes é necessário converter de um tipo de 
dado numérico para string, e para realizar 
concatenação de strings
 string to_string (int val);
 string to_string (long val);
 string to_string (long long val);
 string to_string (unsigned val);
 string to_string (unsigned long val);
 string to_string (unsigned long long val);
 string to_string (float val);
 string to_string (double val);
 string to_string (long double val);
GNU C++ 11
Projeto->Opções do Projeto
64
Conversão - string
#include <iostream> //cout, endl
#include <cstdlib> //EXIT_SUCCESS
#include <cstring>
using namespace std;
int main(int argc, char *argv[]) { 
double numdouble = 10.15;
int numint = 20;
string saida = ""; 
saida = to_string(numdouble)+" e "+to_string(numint);
cout << "Conversão = " << saida << endl; 
return EXIT_SUCCESS;
}
65
Conclusão
◼ Vetores em C++ começam em 0, em algumas linguagens é possível 
determinar o intervalo.
◼ Cuidado ao listar vetores, pois C++ permite extrapolar os limites 
definidos.
◼ Cuidado ao usar vetores de TAD eles devem ser processados 
diferentemente de vetores de tipos primitivos.
◼ Literais em C++ são vetores de char e terminam com ‘\0’.
◼ As operações de manipulação de vetores e strings são especificas 
para C++.
◼ As operações de string retorna a string modificada.
◼ Ao usar string deve-se usar operaçõesespecificas sua comparação.
◼ O uso da classe String facilita o uso de manipulação de Literais.
66
Bibliografia/Referências
◼ Stroustrup, Bjarne. The C++ Programming 
Language. 2019. Disponível em: 
“http://www.stroustrup.com/C++.html” 
67
Fim

Outros materiais