1 /* vim: set et sts=4 sw=4 fdm=marker fmr={,} fdn=1 fo+=t tw=80:
3 * Taller de Programación (75.42).
6 * Ordena texto ASCII o Unicode.
8 * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9 * Puede copiar, modificar y distribuir este programa bajo los términos de
10 * la licencia GPL (http://www.gnu.org/).
12 * Creado: Mon Sep 22 21:00:15 ART 2003
17 #ifndef UNIVERSALSTRING_H
18 #define UNIVERSALSTRING_H
31 class UniversalString {
33 /// Cadena de caracteres.
34 std::vector<T> string;
39 UniversalString(void) {
41 std::cerr << "En constructor de UniversalString." << std::endl;
45 /// Constructor a partir de un string C.
46 UniversalString(const char* str) {
48 std::cerr << "En constructor de UniversalString a partir de string C."
51 int len = strlen(str);
54 for (int i = 0; i < len; i++) {
55 string.push_back(str[i]);
59 /// Constructor de copia.
60 UniversalString(const UniversalString& str) {
62 std::cerr << "En constructor de copia de UniversalString."
68 virtual ~UniversalString(void) {
70 std::cerr << "En destructor de UniversalString." << std::endl;
74 /// Asignación de una instancia a otra.
75 UniversalString& operator=(const UniversalString& str) {
77 std::cerr << "En operator= de UniversalString." << std::endl;
83 /// Comparación por menor de dos instancias.
84 bool operator<(const UniversalString& str) {
86 std::cerr << "En operator< de UniversalString." << std::endl;
88 return string < str.string;
91 /// Comparación por igual de dos instancias.
92 bool operator==(const UniversalString& str) {
94 std::cerr << "En operator== de UniversalString." << std::endl;
96 return string == str.string;
100 //operator char*(void);
102 /// Volcado a un stream de salida.
103 friend std::ostream& operator<<(std::ostream& out,
104 const UniversalString<T>& str) {
106 std::cerr << "En operator<< de UniversalString." << std::endl;
108 // Copio el vector de caracteres al stream de salida.
109 std::copy(str.string.begin(), str.string.end(),
110 std::ostream_iterator<T>(out, ""));
114 /// Captura desde un stream de entrada.
115 friend std::istream& operator>>(std::istream& in,
116 UniversalString<T>& str) {
118 std::cerr << "En operator>> de UniversalString." << std::endl;
120 // Limpio la cadena actual.
123 // Obtengo primer caracter, incluyendo espacios.
124 in >> std::noskipws >> c;
125 // Mientras que no sea el fin de línea, sigo leyendo caracteres.
126 while (!c.is_endl()) {
127 str.string.push_back(c);
128 in >> std::noskipws >> c;
135 #endif // UNIVERSALSTRING_H