Fecha y hora actual: Sab 31 Jul, 2010 05:50 am
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

programa en c++ aydaaaa!!! soy nueva en el foro

Responder al Tema

Índice del Foro > C, C#, Visual C++ > programa en c++ aydaaaa!!! soy nueva en el foro

Autor Mensaje
morgane



Registrado: 08 Mar 2010
Mensajes: 3

Mensaje Publicado: Lun 08 Mar, 2010 19:12 pm

Título del mensaje: programa en c++ aydaaaa!!! soy nueva en el foro

Responder citando

Codificar cadena de caracteres. Esta opción leerá por teclado una secuencia de caracteres de LONGITUD INDEFINIDA (no pueden utilizarse arrays) terminada en un punto y la codificará de forma que cuando aparezca de forma consecutiva el mismo carácter dos o más veces, en la salida se mostrará dicho carácter una sola vez seguido del número de repeticiones.
Por ejemplo, para la entrada: AbbbccccdeffG.
Debería mostrarse por pantalla: Ab3c4def2G

Volver arriba
Ver perfil del usuario Enviar mensaje privado
ratanas813
Usuario Iniciado


Registrado: 05 Feb 2010
Mensajes: 34
Ubicación: Chimbarongo Chile

Mensaje Publicado: Lun 08 Mar, 2010 22:46 pm

Título del mensaje: Re: programa en c++ aydaaaa!!! soy nueva en el foro

Responder citando

#include <cstdlib>
#include <iostream>
#include <list>
using namespace std;

char VACIA[]={0};

class CadenaCodificada{
private:
list<char> lista;
char* cadena;

public:

CadenaCodificada(){
cadena=NULL;
}

char* getCadena(){
if(!cadena)
return VACIA;
else
return cadena;
}

void leerCadena(){
char caracter;
char anterior='\0';
int contador=0;
int longitud=1;
bool salida=false;

while(!salida){
caracter=cin.get();
if(caracter=='.'){
salida=true;
}
if(caracter != anterior){
if(contador >1){
lista.push_back(contador+4Sol;
longitud++;
}
lista.push_back(caracter);
anterior=caracter;
contador=1;
longitud++;
}else{
contador++;
}

}
cadena=new char[longitud];
list<char>::iterator i;
int j=0;
for(i=lista.begin();i!=lista.end();++i,j++){
cadena[j]= *i;
}
cadena[longitud-2]='\0';
}
};


int main(int argc, char *argv[])
{
CadenaCodificada cad;
cad.leerCadena();
cout<<cad.getCadena()<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Volver arriba
Ver perfil del usuario Enviar mensaje privado
ratanas813
Usuario Iniciado


Registrado: 05 Feb 2010
Mensajes: 34
Ubicación: Chimbarongo Chile

Mensaje Publicado: Lun 08 Mar, 2010 22:48 pm

Título del mensaje: Re: programa en c++ aydaaaa!!! soy nueva en el foro

Responder citando

espero y te sea util de todos modos creo que asi deberia funcionar

Volver arriba
Ver perfil del usuario Enviar mensaje privado
morgane



Registrado: 08 Mar 2010
Mensajes: 3

Mensaje Publicado: Lun 08 Mar, 2010 23:34 pm

Título del mensaje: Re: programa en c++ aydaaaa!!! soy nueva en el foro

Responder citando

no me funciona y la biblioteca list no se para que sirve pero muchas graciaas
!!

Volver arriba
Ver perfil del usuario Enviar mensaje privado
ratanas813
Usuario Iniciado


Registrado: 05 Feb 2010
Mensajes: 34
Ubicación: Chimbarongo Chile

Mensaje Publicado: Mar 09 Mar, 2010 14:58 pm

Título del mensaje: Re: programa en c++ aydaaaa!!! soy nueva en el foro

Responder citando

Encontre el problema estaba en cin.get() lo reemplaze por getche()
respecto a <list> es una biblioteca que nos proporciona una serie de estructuras de datos estandar :proguntale a wikipedia XD no te puedo postear links al respecto (muy nuevito yo)

Código:
#include <cstdlib>
#include <iostream>
#include <list>//para usar la lista de STL
#include <conio.h>
using namespace std;

char VACIA[]={0};//cadena de un solo elemento caracter nulo
//clase para manejar la cadena
class CadenaCodificada{
      private:
              list<char> lista; // creamos una lista para manejar los caracteres de forma dinamica
              char* cadena;//para almacenar la cadena resultante
             
      public:
             
             CadenaCodificada(){
                    cadena=NULL;
             }
             
             char* getCadena(){
                   if(!cadena)// si la cadena fuese NULL devuelve una cadena vacia
                      return VACIA;
                   else
                      return cadena;
                   }
             
             void leerCadena(){
                  char caracter;//para almacenar el caracter leido
                  char anterior='\0';//para comparar con el caracter anteriormente leido e ir contando
                  int contador=1;//numero de repeticiones de un determinado caracter
                  int longitud=1;//cantiodad de caracteres de la cadena
                  bool salida=false;//controlar la salida del bucle
                 
                  while(!salida){
                       
                        //leemos el caracter con getche() cin.get() seria mas adecuado pero requiere
                        // que pulsemos ENTER al final (alli estaba el problema)
                        caracter=getche();
                        if(caracter=='.'){//si fue punto
                            salida=true;//indicamos la salida en la siguiente iteracion
                            }
                            //contamos las repeticiones     
                        if(caracter != anterior){
                            if(contador >1){
                               lista.push_back(contador+48);//en el ascii los codigos de los numeros estan del 48 en adelante
                               longitud++;
                            }
                            lista.push_back(caracter);//guandamos el caracter al final de la lista
                            anterior=caracter;//actualizamos para comparar al siguiente ciclo
                            contador=1;
                            longitud++;
                        }else{
                           contador++;   
                         }
 
                  }
                  cadena=new char[longitud];//reservamos memoria para la cadena
                  list<char>::iterator i;//creamos un iterador para recorrer la lista
                  int j=0;//un contador para el arreglo
                  for(i=lista.begin();i!=lista.end();++i,j++){
                     cadena[j]= *i;//guardamos los caractertes de la lista en la cadena definitiva
                  }
                  cadena[longitud-2]='\0';//la terminamos con el caracter NULO
             }
      };


int main(int argc, char *argv[])
{
    CadenaCodificada cad;
    cad.leerCadena();
    cout<<cad.getCadena()<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
[/code]

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Fijo (PostIt): NORMAS PARA EL FORO

Tesis Tu PC 0 Vie 16 Jul, 2010 08:22 am Ver último mensaje
El foro no contiene ningún mensaje nuevo

Fijo (PostIt): NORMAS PARA EL FORO

Tesis Hosting 0 Vie 16 Jul, 2010 08:21 am Ver último mensaje
El foro no contiene ningún mensaje nuevo

Actualización del foro (13-07-2010)

Tesis Temas generales 6 Mar 13 Jul, 2010 10:36 am Ver último mensaje
El foro no contiene ningún mensaje nuevo

un programa que se encargue de mantener actuali...

luisfigueira9 C, C#, Visual C++ 3 Mar 13 Jul, 2010 01:03 am Ver último mensaje
El foro no contiene ningún mensaje nuevo

programa para agregar, borrar y buscar.

Tesis Visual Basic .NET 2 Sab 26 Jun, 2010 02:35 am Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,