Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - K-YreX

#741
En realidad el tercer parámetro no es obligatorio, pero el segundo sí, que es el tamaño. Lo que tú estás usando como segundo parámetro en realidad es el tercero. Por lo tanto, para tu caso son necesarios los 3 parámetros (elige un tamaño lo suficientemente grande para el segundo parámetro y listo, si sabes que vas a encontrar antes el delimitador). Suerte :-X
#742
Primero de todo, mete tu código entre etiquetas de código GeSHi (dando a modificar mensaje y encima del cuadro de texto las puedes seleccionar).

Segundo, no vayas capturando caracter a caracter... <cin> puede almacenar hasta el primer espacio que se encuentra. En cambio hay otras funciones como <getline()> que también almacenan lo que viene después de cada espacio hasta que se pulsa enter.

Una idea que se me viene a la cabeza, almacena todo el texto hasta el enter final en un <string>. Recorre ese <string>, por cada palabra, si es distinta de <END>, la guardas. Y cuando coincida con <END>, se acabó. Ahora te toca traducirlo. Suerte :-X

PD: Te recomiendo que amplies el programa para poder escribir también en minúsculas ya que el cambio que tienes que hacer es muy pequeño y vuelve el programa bastante más funcional.
#743
AQUÍ te dejo un enlace a un tema que se abrió hace un tiempo para el mismo propósito.
Y AQUÍ otro enlace a un tema fijado en este foro donde se han compartido documentos sobre C/C++ (libros/papers).

(Hay que buscar un poco antes de preguntar...)
Suerte :-X
#744
Bueno a ver, hay varias cosillas para corregir:
- Lo que has creado es un array de punteros. Si lo haces de esa manera, te faltaría reservar memoria dinámica para cada palabra. Lo suyo si lo haces con memoria estática sería crear una matriz:

const int MAX_PALABRAS = 10;
const int MAX_LONGITUD = 20;
char conjunto_palabras[MAX_PALABRAS][MAX_LONGITUD];
char palabra_actual[MAX_LONGITUD];


- Para recoger una palabra de la entrada estándar te recomiendo usar <fgets()> en lugar de <gets()> es una función más segura y recomendada:

// siguiendo el codigo anterior
printf("Introduce palabra: ");
fgets(palabra_actual, MAX_LONGITUD, stdin);


- Para guardar cada palabra en la matriz usa la función <strcpy()> o su variante <strncpy()>:

//siguiendo el ejemplo anterior
strcpy(conjunto_palabras[i], palabra_actual);


- Para el filtro de entrada que has implementado con el <while()>, es el típico uso que se le da al <do while()>:

do{
    // pedir palabra
    // guardar palabra
    // preguntar si pedir mas palabras
    scanf("%c", &repetir);
    getchar();
}  while(i < MAX_PALABRAS && (repetir == 's' || repetir == 'S');


Espero que te sirva. Suerte :-X
#745
Pon el código entre etiquetas de código GeSHi. Dando a modificar el mensaje puedes elegirlas encima del cuadro de texto.
#746
El problema era que olvidé los paréntesis. (++it1)--.
Prueba a ver si funciona y me cuentas. Suerte :-X
#747
Programación C/C++ / Re: getline
20 Enero 2019, 18:05 PM
Aquí te dejo el enlace al tema, ya que sino se te va a hacer un poco largo encontrarlo. Suerte :-X
#748
Yo he creado un programa similar al que mostrabas pero más sencillo para probar el ordenamiento y me ha funcionado sin problemas. Deja tu código a ver cómo te ha quedado por si el fallo está en otra cosa. :-X
#749
Programación C/C++ / Re: getline
20 Enero 2019, 17:27 PM
Lo primero de todo pon tu código entre etiquetas de código GeSHi (dando a modificar mensaje y encima del cuadro de texto tienes la opción para elegirlas).

El problema que tienes es típico cuando se trabaja con cadenas de caracteres. Al introducir el nombre del archivo, introduces el nombre y le das a enter. Ese enter se queda en el buffer y cuando pides el texto, el enter del buffer pasa a la variable <Texto>. Por eso parece que se lo salta y si te fijas en el archivo creado tiene un salto de línea guardado.

En este mismo foro hay varios temas para tratar ese problema del buffer. Por favor, no uses el típico <fflush(stdin)> ya que para algo hemos tratado de buscar alternativas más correctas en los temas que te comento.

Aparte de eso te recomiendo que si vas a usar <string>, no mezcles con cadenas de <char>. Si creas un <string> para guardar el nombre del archivo luego sólo tienes que hacer esto para poder abrir el archivo:
Código (cpp) [Seleccionar]

string nombre_fichero = "nuevo.txt";
ofstream fichero(nombre_fichero.c_str());

Con ese método transformas un <string> en una cadena <char>.

También te recomiendo que en vez de usar etiquetas y <goto()>, emplees un filtro <do while>. Lo que tú has hecho está más relacionado con implementaciones a bajo nivel. En lenguajes de alto nivel hay otras opciones como la que te he comentado, es más correcto.

Y en vez de usar <system("pause")>, te recomiendo usar <cin.get()>, el resultado es el mismo y te evitas hacer una llamada al sistema, lo cual es más costoso.

Suerte :-X
#750
La buena noticia es que es posible hacer lo que quieres hacer, el único problema es que estabas teniendo un problema con el uso de los iteradores. Si asignas un iterador a otro e incrementas uno de ellos, no se incrementa el otro (solo lo aclaro)

Código (cpp) [Seleccionar]

void Agenda::ordenar(){
    Contacto auxiliar;
    for(list<Contacto>::iterator it1 = listapal.begin(); it1 != --listapal.end(); it1++)
        for(list<Contacto>::iterator it2 = ++it1--; it2 != listapal.end(); it2++)
            if(it1->getNombre() > it2->getNombre()){
                auxiliar = *it1;
                *it1 = *it2;
                *it2 = auxiliar;
            }
}


Ya sé que puede parecer muy raro eso de ++it1-- pero es la forma más rápido de hacerlo. Te lo explico por si lo quieres hacer de otra forma:
Lo normal es que si el bucle externo se controla con <i>, el bucle interno empieza siempre en <i+1>. Al ser iteradores de una lista no se puede hacer <it2 = it1+1>... Entonces cómo lo arreglamos? Con el uso de los incrementos en prefijo y sufijo:
  • En prefijo primero se incrementa/decrementa y luego se asigna.
  • En sufijo primero se asigna y luego se incrementa/decrementa.
    Entonces así conseguimos incrementar <it1> en 1, después se asigna a <it2> y después se decrementa <it1> para dejarlo igual. Suerte :-X