Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: deschattenmann en 3 Julio 2010, 07:39 AM

Título: Ayuda por favor con manejo de cadenas de caracteres y numéricas
Publicado por: deschattenmann en 3 Julio 2010, 07:39 AM
hola bueno lo que quiero hacer es que el usuario ingrese: hola y yo obtenga 10411110897 (código ascii de hola) y pueda sumar restar multiplicar números a esa cadena. Me trabo mucho por que el usuario ingresa texto y yo quiero convertir ese texto a un numero gracias por la ayuda :D
Título: Re: Ayuda por favor con manejo de cadenas de caracteres y numéricas
Publicado por: nicolas_cof en 3 Julio 2010, 07:41 AM
deschattenmann, te recomendaria leer las Reglas del subforo (https://foro.elhacker.net/programacion_cc/reglas_del_subforo-t251603.0.html)

Si pones algo del avance que llevas hecho seria mas facil para nosotros poder ayudarte.

Salu10.
Título: Re: Ayuda por favor con manejo de cadenas de caracteres y numéricas
Publicado por: deschattenmann en 3 Julio 2010, 07:59 AM
Pues no llevo mucho la verdad pero bueno esto es lo que tengo:


#include <stdio.h>

main()
{
char cad[] = "hola";
int i = 0;

while (cad[i] != '/0')
{
       printf("%d", cad[i]);
       i++;
}
}


esto me imprime la cadena que quiero, pero si intento algo como:


x = cad + 10;


Ya no funciona la cosa...
Título: Re: Ayuda por favor con manejo de cadenas de caracteres y numéricas
Publicado por: nicolas_cof en 3 Julio 2010, 08:05 AM
deschattenmann, usa el boton modificar para no hacer doble post

En cuanto el codigo, te sugiero que te pases por este post por algunas cuestiones

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Tendrias que hacer lo siguiente...

x = cad[i] + 10;

Salu10.

Título: Re: Ayuda por favor con manejo de cadenas de caracteres y numéricas
Publicado por: deschattenmann en 3 Julio 2010, 08:40 AM
Creo que no me di a entender bien :S por ejemplo cuando quier sumar 10 es a 10411110897 ósea 10411110897 + 10, quiero sumar 10 a TODA la cadena no a un solo carácter
Título: Re: Ayuda por favor con manejo de cadenas de caracteres y numéricas
Publicado por: nicolas_cof en 3 Julio 2010, 11:05 AM
deschattenmann, ahi te dejo un codigo que hace lo que creo que entendi que querias

Igual fijate, cualquier error que veas no dudes en postearlo

/* by nicolas_cof bajo efectos de fernet ( http://es.wikipedia.org/wiki/Fernet ) */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *itoa( int value, char *result, int base )
{
   if ( base < 2 || base > 36 )
   {
       *result = '\0';
       return result;
   }
   
   char* ptr = result, *ptr1 = result, tmp_char;
   int tmp_value;
   
   do
   {
       tmp_value = value;
       value /= base;
       *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
   }
   while ( value );
   
   if ( tmp_value < 0 ) *ptr++ = '-';
   *ptr-- = '\0';
   while ( ptr1 < ptr )
   {
       tmp_char = *ptr;
       *ptr--= *ptr1;
       *ptr1++ = tmp_char;
   }
   
   return result;
}

int main( void )
{
   char cad[] = "hola";
   int i,
       lencad = strlen( cad );
   char *tmp[lencad];
   char *cadnum;
   unsigned long x;

   cadnum = calloc( 25, sizeof( char ) );

   for ( i = 0; i < lencad; ++i )
   {
       tmp[i] = calloc( 4, sizeof( char ) );

       tmp[i] = itoa( cad[i], tmp[i], 10 );

       cadnum = strncat( cadnum, tmp[i], strlen( tmp[i] ) );
   }

   x = atol( cadnum );

   printf( "cadnum:%s | x:%ld | x + 10:%ld \n", cadnum, x, x + 10 );
   
   for ( i = 0; i < lencad; ++i )
       free( tmp[i] );
   free( cadnum );

   return 0;
}


http://www.strudel.org.uk/itoa/

Otra version usando la funcion sprintf() :P

/* by nicolas_cof bajo efectos de fernet ( http://es.wikipedia.org/wiki/Fernet ) */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( void )
{
   char cad[] = "hola";
   int i,
       lencad = strlen( cad );
   char *tmp[lencad];
   char *cadnum;
   unsigned long x;

   cadnum = calloc( 25, sizeof( char ) );

   for ( i = 0; i < lencad; ++i )
   {
       tmp[i] = calloc( 4, sizeof( char ) );

       sprintf( tmp[i], "%d", cad[i] );

       cadnum = strncat( cadnum, tmp[i], strlen( tmp[i] ) );
   }

   x = atol( cadnum );

   printf( "cadnum:%s | x:%ld | x + 10:%ld \n", cadnum, x, x + 10 );
   
   for ( i = 0; i < lencad; ++i )
       free( tmp[i] );
   free( cadnum );

   return 0;
}


Salu10.
Título: Re: Ayuda por favor con manejo de cadenas de caracteres y numéricas
Publicado por: deschattenmann en 5 Julio 2010, 18:10 PM
Sii eso era lo que quería hacer, pensé que seria mas fácil pero pues a entender el código se ha dicho... Muchas gracias nicolas_cof
Título: Re: Ayuda por favor con manejo de cadenas de caracteres y numéricas
Publicado por: nicolas_cof en 5 Julio 2010, 20:20 PM
deschattenmann, de nada! para eso estamos compañero ;)

Salu10.