Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Crear un Conjunto con Ansistring

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Crear un Conjunto con Ansistring Responder citando

Hola:

Pues eso, que necesito crear un conjunto en el que luego ir introduciendo variables AnsiString, más en concreto direcciones IP donde la primera ip posible a introducir fuera por ejemplo "0.0.0.0" y la última "255.255.255.255".

Mi idea es crear ese conjunto de forma que a lo largo del programa voy introduciendo direcciones dentro, para luego ver si una IP cualquiera pertenece o no al conjunto. El problema es que no sé cómo crearlo.

Gracias y un saludo.
JC
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si sólo quieres almacenar los strings puedes usar la clase "set".
Si además quieres asociar algo de información a cada IP, puedes emplear la clase "map".
Busca en la ayuda del Builder cualquiera de las dos y encontrarás más información, y si no, en cualquier manual de C++
Ten en cuenta que son "templates", así q tienes q declararlos de la forma:
Código:

set<AnsiString> conjunto1;

Creo q en el foro hay varios temas referentes al uso de templates así q usa la opción "buscar" para más información.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Si yo ya sé que supuestamente hay que hacerlo con set, pero el código:

Set <AnsiString> conjunto1;

no funciona. Necesita un elemento "minimo" y otro "máximo". ese es mi problema, con enteros no hay problema pero al poner direcciones IP (cadenas de texto del tipo "192.168.10.25" no funciona.

Gracias y un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Lo ha puesto en minúsculas, por lo que supongo que el se estaba refiriendo al "set" de la librería estándar de C++ y no al "Set" de la VCL.

Un pequeño ejemplo de su uso:
Código:
#include <set>

std::set<AnsiString> conjunto;

// Añadimos elementos al conjunto
conjunto.insert("192.168.10.25");
conjunto.insert("0.0.0.0");
conjunto.insert("255.255.255.255");

// Comprobamos si un elemento determinado existe en el conjunto
if (conjunto.find("0.0.0.0") != conjunto.end())
    ShowMessage("0.0.0.0 es parte del conjunto");
else
    ShowMessage("NO es parte del conjunto");

// Averiguamos cuantos elementos distintos hay
int numElementos = conjunto.size();

// Recorremos el conjunto y lo mostramos en un TListBox
std::set<AnsiString>::iterator iter;
for (iter = conjunto.begin(); iter != conjunto.end(); iter++)
{
    ListBox1->Items->Add(*iter);
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Efectivamente me refería al "set" de la librería estándar de C++. Gracias _Leo por poner un ejemplo concreto, q yo no tenía el Builder a mano y no pude hacerlo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Joder Leo, ¿qué íbamos a hacer sin tu ayuda...? No sólo contestas a mi duda, sino que vas más allá. Gracias.

Una cosita más:
¿Me puedes/podéis explicar la línea:
std::set<AnsiString>::iterator iter;
He estado mirando la ayuda pero no acabo de entenderlo, lo siento.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En esa línea se está declarando un iterador, que es básicamente un puntero inteligente para moverse por los elementos de una estructura. Imagina que tuvieras una lista de enteros de la forma más básica:
Código:

typedef struct ListaInt {
    int elem;
    struct ListaInt *siguiente;
} ListaInt;
ListaInt *primero = NULL;

Para desplazarte por todos los elementos de esa lista harías:
Código:

ListaInt *aux = primero;
while (aux != NULL) {
    // Hacer algún proceso con el elemento aux
    aux = aux->siguiente;
}

Pues lo mismo realizan los iteradores, sólo que tú te puedes olvidar de cómo funciona internamente la estructura que los emplea. Esto facilita tus tareas de programador.
Cualquier estructura que permita un iterador incluye, según el estándar, una función begin para devolverte un iterador que apunte al primer elemento de la estructura; y una función end para el último elemento.
Los iteradores además suelen tener sobrecargado el operador "++", con lo que para avanzar de elemento en elemento basta con hacer "it++".
Además de estas funciones básicas encontrarás, dependiendo de la clase, funciones para acceder a un elemento concreto de la lista en forma de iterador, o para recorrer los elementos en sentido inverso (--)...
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Ah, me olvidaba...
Para acceder al elemento al que apunta el iterador se usa el operador "*", tal como puso _Leo en su ejemplo:
Código:

 ListBox1->Items->Add(*iter);
// Estás accediendo al elemento apuntado por iter
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Gracias masBecas:

Da gusto recibir contestaciones tan rápidas y eficientes.
A cuidarse.
Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.