Ayuda por favor con manejo de cadenas de caracteres y numéricas

Iniciado por deschattenmann, 3 Julio 2010, 07:39 AM

0 Miembros y 1 Visitante están viendo este tema.

deschattenmann

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

nicolas_cof

deschattenmann, te recomendaria leer las Reglas del subforo

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

Salu10.

deschattenmann

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...

nicolas_cof

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.


deschattenmann

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

nicolas_cof

#5
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.

deschattenmann

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

nicolas_cof

deschattenmann, de nada! para eso estamos compañero ;)

Salu10.