/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Una Duda
Ir a página Anterior  1, 2
 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 24/08/2007 8:12 am
Título:

Mijail escribió:
worm escribió:
¿Lo que deseas es determinar si la variable "variable" es de tipo char y en base a eso generar una determinada accion?


Me referia exactamente a eso. Ya veo que no puedo.

En buen plan y siendo completamente honesto no le veo utilidad ya que si la declaracion de la variable y su uso se encuentran en el mismo bloque uno ya sabe cual es el tipo de esta.

Y si la declaracion y uso se encuentran en bloques diferentes (me refiero a funciones) se debe pasar el argumento ya sea como un tipo fijo, mediante una funcion con un numero variable de argumentos o mediante un puntero generico (el tipo "void *") pero en estos dos ultimos casos se tendria que pasar a la funcion informacion adicional para realizar la conversion correcta.

Por cierto el numero de bits por caracter usualmente es ocho pero esto no esta garantizado, es mejor utilizar la macro CHAR_BIT definida en limits.h para conocer este valor. En el caso del numero de bits que componen cada tipo este esta dado por la implementacion siendo el minimo 16 bits para los tipos short e int y 32 para el tipo long.

Un caso similar es el rango valido de cada tipo.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 25/08/2007 9:59 am
Título:

Quizas simplemente quiera saber si el dato almacenado corresponde al juego de caractres asccii y este es alfanumerico o del alfabeto, un problema de concepto en los novatos es confundir el tipo char con una 'letra'.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 25/08/2007 11:03 am
Título:

Me parece que podría comprobar la (variable) con el tamaño exacto en C++ del tipo char que es el caracter A, en contra que en C es el tipo int.
A ver si me explico mejor:
Código:

inline int cplusplus()
{
    return(sizeof(char)==sizeof('A'));
}
...........
int i = 0;
char c = 0;

if(cplusplus())
{
            // cambiar c por i
   if(sizeof(c)==sizeof('A'))
   {
         cout<<"es tipo char";
   }else{
            cout<<"no es tipo char";
   }
}


Determining C or C++ Compilation at Runtime:

In C++ the size of a constant character ('A') equals that of the type char, which is something you would expect. In C, however, the size of a constant character equals that of the type int.
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 25/08/2007 1:28 pm
Título:

No entiendo que quieres decir, sizeof se resuelve en tiempo de compilacion, la constante caracter en C++ se promociona a este tipo y asi es su r-value.

En este caso se puede utilizar el mecanismo RTTI de c++ y usar typeid, pero insisto, no creo que nuestro amigo deseara eso, mas bien me inclino por lo que dije antes.


S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 25/08/2007 7:40 pm
Título:

Smile Cierto que se puede con typeid, no lo tenía presente desde hace tiempo.
Sobre si Mijail quiere conocer si (variable) es del tipo char o si corresponde a un código ascii, creo que es la primera, habria que ver que es lo que dice.

Saludos.
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 26/08/2007 3:57 am
Título:

Esto de la función sizeof() ya lo pensé pero me pareció un poco inútil porque esa variable a la cual miras el tamaño ya sabes que tamaño tiene pues ya la has definido previamente.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 26/08/2007 7:27 am
Título:

Como ya se comento lo mas sencillo seria tener informacion adicional que indicara el tipo del objeto , esto para no tener que recurrir a sizeof.

Un ejemplo sencillo utilizando una union se describe en el tema Union discriminada.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 26/08/2007 11:05 am
Título:

Aquí tienes la función charint() que he creado la cual te permitiría discernir si cierta cadena de caracteres representa un entero o no. Y además si representa un entero te lo transforma en entero. Esto, para el programa que hiciste te debería servir.

Código:
#include<stdio.h>

//FUNCION POTENCIA ENTERA QUE DA EL RESULTADO DE A^B
int potencia(int a, int b)
{
  int indice,poten=1;
  for(indice=0 ; indice<b ; indice++)
  {
    poten*=a;
  }
  return poten;
}

//CONVIERTE UNA CADENA DE CARACTERES EN UN NUMERO ENTERO SI LA CADENA REPRESENTA UN NUMERO ENTERO
int charint(char *cadena,int *TipoVariable)
{
  int numero=0,longchar,indice;
  longchar=strlen(cadena);
  for(indice=0 ; indice<longchar; indice++)
  {
    if(cadena[indice]>=48 && cadena[indice]<=57)
    {
      numero+=(cadena[indice]-48)*potencia(10,longchar-indice-1);
    }
    else
    {
      *TipoVariable=1;
    }
  }
  return numero;
}



int main()
{
  char cadena[11];
  int TipoVar=0;
  int numero;
  printf("Escribe un numero\n");
  scanf("%s",cadena);
  numero=charint(cadena,&TipoVar);
  if( TipoVar==0)
  {
    printf("%d es un numero",numero);
  }
  else
  {
    printf("%s no es un numero",cadena);
  }
  return 0;
}


Saludos! Smile
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 26/08/2007 1:59 pm
Título:

Para obtener un numero entero en base a una cadena de texto la biblioteca estandar de C provee de varias opciones como atoi, sscanf, strtol, etc., cual de estas elegir depende de que tan solida sea la validacion que uno requiera.

En el caso de desarrollar nuestra propia funcion no es necesario una funcion de potencia, basta con multiplicar el total acumulado por dies y sumar el digito siendo procesado, para esto ultimo se puede utilizar la funcion isdigit (ctype.h):
Código:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int fn_atoi(char *cadena, int *es_entero);

int main(void)
{
   char cadena[11];
   int es_entero;
   int numero;
   
   printf("Escribe un numero: ");
   fflush(stdout);
   if (scanf("%10s", cadena) != 1)
      return EXIT_FAILURE;
   
   numero = fn_atoi(cadena, &es_entero);
   if (es_entero)
      printf("%d es un numero\n", numero);
   else
      printf("%s no es un numero\n", cadena);
   
   return EXIT_SUCCESS;
}

int fn_atoi(char *cadena, int *es_entero)
{
   int numero;
   
   for (numero = 0; isdigit(*cadena); cadena++)
      numero = numero * 10 + (*cadena - '0');
   
   *es_entero = (*cadena == '\0');
   return numero;
}


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 26/08/2007 4:06 pm
Título:

gracias por el apunte!
Volver arriba
spesmod



Registrado: 23 Ago 2007
Mensajes: 33

MensajePublicado: 28/08/2007 7:09 am
Título:

pero es que a cualkiera se le cuela un puto error, y me di cuenta cuando ya estaba en el foro... jijiji
pero no te vas a kejar con lo demas no?
espero q t haya servido, xiao.
_________________
|--A--Q--U--A--|
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 2 de 2Todas las horas están en GMT - 8 Horas
Ir a página Anterior  1, 2

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com