manipuladores de formatos todas as especificações de manipuladores predefinidos na linguagem foram...
TRANSCRIPT
![Page 1: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/1.jpg)
Manipuladores de Formatos
Todas as especificações de manipuladores predefinidos na linguagemforam incluídas no ficheiro iomanip.h. Se for necessário usar os
manipuladores o ficheiro iomanip.h deve ser incluído no programa.
Existem os manipuladores simples (sem argumentos) e osmanipuladores com argumentos.
Os manipuladoressimplessão os seguintes:
oct - o valor octal;dec - o valor decimal;hex - o valor hexadecimal;endl - ‘\n’ e apagar o buffer;ends - ‘\0’ e apagar o buffer
só para saída ;flush - apagar o buffer
só para saída ;ws - eliminação de espaços entre símbolos
![Page 2: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/2.jpg)
Os manipuladores com argumentos são seguintes:
setfill(int caracter);setprecision(int pr);setw(int w);resetiosflags(long n);setiosflags(long n);etc.
cout << setw(5) << setfill('-') << hex << 10 << endl;cout << setiosflags(ios::uppercase|ios::internal|ios::showbase)
<< setfill('-') << hex << setw(5) << 10 << endl;cout << 10 << endl;cout << resetiosflags(ios::showbase) << 10 << endl;cout << setiosflags(ios::fixed) << setprecision(1)
<< 12.12345 << endl;
----a0X--A0XAA12.1
![Page 3: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/3.jpg)
A área de acção para cada manipulador começa com o aparecimentodo manipulador e acaba depois de cancelado por outro manipulador
class my_f {};ostream& operator<<(ostream& s,my_f){ s.width(5); s.fill('-');
s.flags(ios::showpos);return s; }
my_f MF;cout << MF << 47 << endl;
cout << hex << a << b << c << dec << d;
Vamos considerar como podemos definir manipuladores novos.
--+47
![Page 4: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/4.jpg)
Podemos também definir os manipuladores novos com argumentos.Vamos considerar, por exemplo, o manipulador wp(n,m) que
especifica a largura do campo n e precisão m para os valores comvírgula flutuante.
class my_manip {int n,m;ostream& (*f)(ostream&,int,int);
public:my_manip(ostream& (*F)(ostream&,int,int),int N, int M) : f(F), n(N), m(M) {}friend ostream& operator<<(ostream& s,my_manip& my){ return my.f(s,my.n,my.m); }
};
![Page 5: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/5.jpg)
ostream& wi_pre(ostream& s, int n, int m){ s.width(n);
s.flags(ios::fixed);s.precision(m);return s;
}
my_manip wp(int n, int m){ return my_manip(wi_pre,n,m); }
int main(int argc, char* argv[]){ cout << 12.8765 << endl << wp(10,2) << 12.8765 << endl;
return 0;}
12.8765 12.88
![Page 6: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/6.jpg)
Strings e Ficheiros - Classes (1)
• Existem classes específicas para trabalhar com strings e ficheiros em C++
• As operações I/O efectuam-se através de streams
Ficheiros e Strings
![Page 7: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/7.jpg)
Strings e Ficheiros - Classes (2)
• Existem 3 tipos de streams– streams de leitura– streams de escrita– streams de leitura/escrita
![Page 8: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/8.jpg)
Strings e Ficheiros - Classes (3)
• Classes de leitura para ficheiros e strings:– ifstream– istrstream
• Classes de escrita para ficheiros e strings:– ofstream– ostrstream
![Page 9: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/9.jpg)
Strings e Ficheiros - Classes (4)
• Classes de leitura/escrita para ficheiros e strings:– fstream– strstream
![Page 10: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/10.jpg)
Strings e Ficheiros - Classes (5)
• Todas estas classes são derivadas da classe ios
![Page 11: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/11.jpg)
STRINGS
![Page 12: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/12.jpg)
Strings - Construção (1)
• Classe istrstream– o objecto istrstream pode ser construído da
seguinte forma:
– istrstream in_str(char* psz);
– o objecto in_str irá ficar associado a uma string apontada por psz
![Page 13: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/13.jpg)
Strings - Construção (2)
• Classe istrstream– o objecto istrstream também pode ser
construído da seguinte forma:
– istrstream in_str(char* pch, int nLength);
– o objecto in_str irá ficar associado a um array de caracteres normal com nLength caracteres
![Page 14: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/14.jpg)
Strings - Construção (3)
• Classe ostrstream– o objecto ostrstream pode ser construído da
seguinte forma:
– ostrstream out_str;
– é criado um objecto out_str para escrita com reserva dinâmica de memória para novos caracteres
![Page 15: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/15.jpg)
Strings - Construção (4)
• Classe ostrstream– o objecto ostrstream também pode ser
construído da seguinte forma:
– ostrstream out_str(char* pos, int Len, int OpenMode);
– OpenMode pode especificar ios::app ou ios::ate– pos aponta para uma string
![Page 16: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/16.jpg)
Strings - Construção (5)
• Classe strstream = istrstream + ostrstream– o objecto strstream pode ser construído da
seguinte forma:
– strstream io_str;
– objecto io_str criado com buffer interno e dinâmico, inicialmente vazio
![Page 17: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/17.jpg)
Strings - Construção (6)
• Classe strstream = istrstream + ostrstream– o objecto strstream também pode ser construído
da seguinte forma:
– strstream io_str(char* pos, int Len, int OpenMode);
– pos aponta para uma string já existente com Len caracteres
![Page 18: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/18.jpg)
Strings - Construção (7)
• Sempre que possível deve deixar-se o objecto efectuar a reserva dinâmica do buffer interno.
![Page 19: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/19.jpg)
Strings - Construção (7)
char* a_str = "Ola"; // 3 caracteresostrstream str(a_str, 10);
str << "nova string";
– Irá ocorrer um erro pois a_str só tem reservados 3 caracteres
![Page 20: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/20.jpg)
Strings - Construção (8)
• A construção aconselhada seria:
ostrstream str;
str << "Ola";
str << "nova string";
OK - memória reservada dinamicamente
![Page 21: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/21.jpg)
FICHEIROS
![Page 22: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/22.jpg)
1. #include <fstream.h>
2. fstream source;
3. source.open(”my.txt", ios::in | ios::nocreate); if(!source.good()) {
cerr << "Nao foi possivel abrir o ficheiro fonte" << endl;exit(1); // pode usar controlo de excepções}
4. template <class Type> fstream& operator>>(fstream& source, set<Type> &S){................................
return source;}
5. source.close();
o nome lógico
o nome do ficheiro
![Page 23: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/23.jpg)
Ficheiros - Construção (1)
• Classe ifstream– o objecto ifstream pode ser construído da
seguinte forma:
– ifstream in_file;
– o objecto in_file é criado mas nenhum ficheiro é aberto
![Page 24: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/24.jpg)
Ficheiros - Construção (2)
• Classe ifstream– o objecto ifstream também pode ser construído
da seguinte forma:
– ifstream in_file("file.dat");
– o objecto in_file é criado e o ficheiro file.dat é aberto em modo de texto para leitura
![Page 25: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/25.jpg)
Ficheiros - Construção (3)
• Qualquer construtor para objectos do tipo ficheiro, constrói apenas o objecto ficheiro sem abrir o ficheiro “físico” se não for dado o nome do ficheiro aquando da construção
![Page 26: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/26.jpg)
Ficheiros - Construção (4)
• Classe ofstream– o objecto ofstream pode ser construído da
seguinte forma:
– ofstream out_file("file.dat", ios::binary);
– o objecto out_file quando criado, é associado ao ficheiro file.dat. Este é aberto em modo binário para escrita
![Page 27: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/27.jpg)
Ficheiros - Construção (5)
• O objecto na construção aceita os seguintes parâmetros:
Flag Significadoios::app os dados são escritos no fim do ficheiroios::ate o apontador vai para o fim do ficheiro quando este é abertoios::in o ficheiro é aberto para leituraios::out o ficheiro é aberto para escritaios:.binary o ficheiro é aberto em modo binário. Se ausente o ficheiro é aberto em
modo texto.ios::trunc apaga o conteúdo de um ficheiro quando este é aberto para escritaios::nocreate falha a abertura do ficheiro se este não existir (apenas para ficheiro de
escrita)ios::noreplace não substitui um ficheiro existente. Se este existir, falha a
abertura
![Page 28: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/28.jpg)
Ficheiros - Construção (6)
• Classe fstream = ifstream + ofstream– o objecto fstream pode ser criado da seguinte
forma:
– fstream io_file("file.dat", ios::in | ios::out | ios::binary);
– é criado o objecto io_file para leitura/escrita em modo binário, associado ao ficheiro file.dat
![Page 29: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/29.jpg)
Ficheiros - Verificação (1)
• A verificação da abertura efectiva de um ficheiro deve ser sempre realizada antes de efectuar qualquer operação I/O sobre este
![Page 30: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/30.jpg)
Ficheiros - Verificação (2)
• Exemplos para verificação da abertura de um ficheiro
if(in_file.bad()) {
cerr << "o ficheiro nao foi aberto" << endl;
exit(1);
}
if(!in_file) {
cerr << "o ficheiro nao foi aberto" << endl;
exit(1);
}
if(in_file.is_open() == 0) {
cerr << "o ficheiro nao foi aberto" << endl;
exit(1);
}
![Page 31: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/31.jpg)
Ficheiros - Verificação (3)
• O método eof() permite saber se foi atingido o fim do ficheiro
while(!io_file.eof()) {
// lê ficheiro
// …
}
![Page 32: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/32.jpg)
LEITURA / ESCRITA
![Page 33: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/33.jpg)
Streams - Leitura/Escrita (1)
• A leitura de strings e ficheiros é efectuada de forma semelhante
• As suas classes derivam de uma classe I/O comum - classe ios
![Page 34: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/34.jpg)
Streams - Leitura/Escrita (2)
char str[10];istrstream in_str("Ola");ifstream in_file("file.dat");
in_str >> str;in_file >> str;in_str.read(str, 3);in_file.read(str, 3);in_str.getline(str,3);in_file.getline(str, 3);
• Leituras de uma string e de um ficheiro para str efectuadas de forma idêntica
![Page 35: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/35.jpg)
Streams - Leitura/Escrita (3)
char str1[] = "PP1";
strstream out_str;
fstream out_file("file2.dat", ios::out);
out_str << str1;
out_file << str1;
out_str.write(str1, 6);
out_file.write(str1, 6);
• Escrita efectuada, numa string e num ficheiro, de forma idêntica
![Page 36: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/36.jpg)
int main(int argc, char* argv[]){ char str[10];
istrstream in_str("Ola");ifstream in_file("file.dat"); // Aveiroin_file.getline(str, 5);cout << str << endl; // O resultado: Aveiin_str >> str;cout << str << endl; // O resultado: Olain_file >> str; // O resultado: rocout << str << endl;char str1[10] = "PP1";strstream out_str;fstream out_file("file2.dat", ios::out);out_str << str1;out_file << str1;out_str.read(str, 1);cout << str << endl; // O resultado: Po. . . . . . . . . . . . . . . . . . . . . .
Aveiro
PP1
![Page 37: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/37.jpg)
Destrutores (1)
• Todos os objectos têm destrutores que libertam o espaço reservado para o objecto
![Page 38: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/38.jpg)
Destrutores (2)
• No caso de ficheiros é boa política efectuar o fecho do objecto (ficheiro) assim que este já não seja necessário. Desta forma são libertados recursos do sistema mais cedo
![Page 39: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/39.jpg)
int main(int argc, char* argv[]){ fstream source,destination;
source.open("source.txt", ios::in | ios::nocreate);if(!source.good()) { cerr << "Nao foi possivel abrir o ficheiro fonte" << endl; exit(1); }
destination.open("out1.txt", ios::out);if(!destination) { cerr << "Nao foi possivel abrir o ficheiro out1" << endl; exit(1);}
![Page 40: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/40.jpg)
char str[50];source >> str;cout << str << endl;destination.write(str,7);source >> str;cout << str << endl;destination.write(str,7); source >> str;cout << str << endl;destination.write(str,7);source >> str;cout << str << endl;destination.write(str,7); source.close();destination.close();return 0;
}
Aveiro Lisboa PortoCoimbra FaroBraga
Aveiro Lisboa Porto Coimbra
![Page 41: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/41.jpg)
int main(int argc, char* argv[]){ fstream source,destination;
StrString my_str;int no_of_caracteres = 0, no_of_words = 0;///////////////////////////////////////////////////////////////////// Abertura dos ficheiros///////////////////////////////////////////////////////////////////source.open("source.txt", ios::in | ios::nocreate);if(!source.good()) {
cerr << "Nao foi possivel abrir o ficheiro fonte" << endl;exit(1);
}
destination.open("out1.txt", ios::out);if(!destination) {
cerr << "Nao foi possivel abrir o ficheiro out1" << endl;exit(1);
}
![Page 42: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/42.jpg)
source >> my_str; // leitura da linhano_of_caracteres = my_str.length(); // incrementa
// o nº de caracteresno_of_words = my_str.words(); // incrementa o nº de palavrascout << my_str << endl; // escreve a linhadestination << my_str << endl; // escreve a linha
// em destination
my_str = " ------------- Estatistica --------------:";
cout << my_str << endl;cout << "Numero de caracteres = " << no_of_caracteres << endl;cout << "Numero de palavras = " << no_of_words << endl;source.close();destination.close();return 0;
}
![Page 43: Manipuladores de Formatos Todas as especificações de manipuladores predefinidos na linguagem foram incluídas no ficheiro iomanip.h. Se for necessário](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc101497959413d8bd798/html5/thumbnails/43.jpg)