Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Necesito un método para validar números y letras

Estas en el tema de Necesito un método para validar números y letras en el foro de C/C++ en Foros del Web. Hola a todos, lo que necesito es un par de métodos que lo que hagan sea en uno que solo pueda ingresar letras y en ...
  #1 (permalink)  
Antiguo 15/03/2015, 00:54
Avatar de Cardo2095  
Fecha de Ingreso: marzo-2015
Ubicación: En mi casa
Mensajes: 18
Antigüedad: 9 años, 1 mes
Puntos: 0
Busqueda Necesito un método para validar números y letras

Hola a todos, lo que necesito es un par de métodos que lo que hagan sea en uno que solo pueda ingresar letras y en otro números y si por ejemplo metes un valor que no sea ese, de un mensaje de error y que vuelva otra vez al punto donde se le ingresa el valor. aquí les dejo un ejemplo de código.


Código C++:
Código:
int num;

void ingresarNum(){

cout<<"ingrese un numero"<<endl;
cin>>num;
validarNum();//o validarLetra si fuera el otro caso
cout<<"Ha ingresado un numero<<endl;
}

//tipodedato validarNum(){

If(){
si es un valor que no sea un num, que el programa me imprima
cout<<"valor incorrecto, ingrese solo numeros"
y me devuelva a ingresar otra vez el valor si es posible.
//sino supongo pongo el metodo ingresarNum();

else(){
si el valor si es un numero que el programa siga su rumbo normalmente



int main(){

ingresarNum();
system("pause");
return 0;
}
  #2 (permalink)  
Antiguo 15/03/2015, 02:53
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Necesito un método para validar números y letras

El modo mas sencillo que conozco seria algo asi:
Código PHP:
#include <iostream>
using namespace std;

#define MAX_BUFFER 5

bool ValidarNum(char *bufferint tam);
bool ValidarLetras(char *bufferint tam);

int main()
{
   
char buffer[MAX_BUFFER];
   
char caracter;
   
bool salir;

   do{
      
salir=true;
      
cout << "Ingrese un numero:";
      
cin.getline(buffer,MAX_BUFFER);

      if(!
ValidarNum(bufferstd::strlen(buffer))){
         
cout << "El valor ingresado no es numerico" << endl;
         
salir=false;
      }
   }while(!
salir);

   do{
      
salir=true;
      
cout << "Ingrese una cadena:";
      
cin.getline(buffer,MAX_BUFFER);
      if(!
ValidarLetras(bufferstd::strlen(buffer))){
         
cout << "El valor ingresado no es alfabetico" << endl;
         
salir=false;
      }
   }while(!
salir);

}

bool ValidarNum(char *bufferint tam)
{
   
int retval=true;

   for(
int i=0i<tam && buffer[i] != 0i++)
   {
      if(
buffer[i] < '0' || buffer[i] > '9'){
         
retval=false;
         break;
      }
   }
   return 
retval;
}

bool ValidarLetras(char *bufferint tam)
{
   
int retval;

   for(
int i=0i<tam && buffer[i] != 0i++)
   {
      if((
buffer[i] < 'a' || buffer[i] > 'z') && (buffer[i] < 'A' || buffer[i] > 'Z')){
         
retval=false;
         break;
      }
   }

   return 
retval;

Si lo que realmente quieres es que no se muestren en pantalla los caracteres no deseados eso ya es otro cantar. Por ahi tengo que tener un codigo en C que hace eso pero ya digo que no es nada estandar y depende de la plataforma ya que el que tengo yo solo funciona en Windows porque usa apis de este para controlar la entrada.
  #3 (permalink)  
Antiguo 15/03/2015, 11:26
Avatar de Cardo2095  
Fecha de Ingreso: marzo-2015
Ubicación: En mi casa
Mensajes: 18
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Necesito un método para validar números y letras

men gracias por la ayuda pero en si no me sirve =P no digo que este mal es solo que si le entro cierta cantidad de valores se cierra el programa y además tengo el profesor prohibió tener un main tan grande
  #4 (permalink)  
Antiguo 15/03/2015, 16:31
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Necesito un método para validar números y letras

usa un tamaño mayor para el buffer o usa strings. Crea una funcion y metes lo que esta e main.
  #5 (permalink)  
Antiguo 16/03/2015, 22:55
Avatar de Cardo2095  
Fecha de Ingreso: marzo-2015
Ubicación: En mi casa
Mensajes: 18
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Necesito un método para validar números y letras

y digamos no hay así como un limite infinito para el buffer?
  #6 (permalink)  
Antiguo 17/03/2015, 00:51
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Necesito un método para validar números y letras

Cita:
y digamos no hay así como un limite infinito para el buffer?
Con los strings no! Pero 'string' no es realmente un tipo de dato si no que es una clase, al trabajar con clases tienes algunos métodos como:
string cadena = "Hola Mundo!":
int tamanio = cadena.size(); // te dice la cantidad de letras en la cadena

char c = "Hola Mundo!";

if ( c == cadena.c_str() ){ //comparar objeto tipo string con cadena C_string.
//son iguales
}

...Hay muuuchos otros métodos que te ayudan, así no tienes por que preocuparte por el tamaño.
Pero claro... solo si tienes permitido usar strings y tener en cuanta que algunas cosas no son iguales. Por ejemplo si una función espera un c_string, no le puedes pasar un string de C++. Pero puedes pasar objeto.c_str(), o buscar alguna otra forma de hacerlo.

http://www.cplusplus.com/reference/string/string/

Lea mas sobre strings de C/C++

suerte
  #7 (permalink)  
Antiguo 17/03/2015, 00:59
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Necesito un método para validar números y letras

string no es de c y ademas no es infinito. Creo que el maximo son 2 gigas. En c siempre se puede usar malloc y trabajar con memoria dinamica pero si recien empiezas no deberias tratar con ello.
  #8 (permalink)  
Antiguo 17/03/2015, 01:55
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Necesito un método para validar números y letras

se que conio no es estandar pero con getch(), malloc y realloc puedes ir capturando caracter por caracter e ir incrementando el buffer conforme lo necesites.
  #9 (permalink)  
Antiguo 17/03/2015, 03:34
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Necesito un método para validar números y letras

Cita:
Iniciado por aguml Ver Mensaje
y ademas no es infinito. Creo que el maximo son 2 gigas. En c siempre se puede usar malloc y trabajar con memoria dinamica pero si recien empiezas no deberias tratar con ello.
El índice que utiliza std::string es de tipo size_t. En la mayoría de los casos, size_t es de tipo unsigned int, es decir, 32 bits sin signo. Dado que std::string usa el tipo char (8 bits - 1 byte) para almacenar el texto, tenemos que: max = 2^32 = 4.294.967.296 B = 4.194.304 KB = 4.096 MB = 8 GB

Lo que sucede es que los equipos de 32 bits tienen una limitación de memoria direccionable de (creo recordar) unos 2 GB - 3 GB, por lo que no vas a poder superar ese límite en ningún momento. Sin embargo, un entorno de 64 bits es capaz de manejar varios petabytes de información ( 1 PB = -redondeando-1.000.000 GB )

Cita:
Iniciado por vangodp Ver Mensaje
Código C++:
Ver original
  1. char c = "Hola Mundo!"; // <--- debería ser char*
  2.  
  3. if ( c == cadena.c_str() ){ //comparar objeto tipo string  con cadena C_string.
  4. //son iguales
  5. }
Espero que no compares nunca dos char* con el operador '==', ya que únicamente estarás comparando la dirección de memoria de ambos punteros jejejeje.
  #10 (permalink)  
Antiguo 17/03/2015, 07:12
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Necesito un método para validar números y letras

Cita:
Iniciado por eferion Ver Mensaje
El índice que utiliza std::string es de tipo size_t. En la mayoría de los casos, size_t es de tipo unsigned int, es decir, 32 bits sin signo. Dado que std::string usa el tipo char (8 bits - 1 byte) para almacenar el texto, tenemos que: max = 2^32 = 4.294.967.296 B = 4.194.304 KB = 4.096 MB = 8 GB

Lo que sucede es que los equipos de 32 bits tienen una limitación de memoria direccionable de (creo recordar) unos 2 GB - 3 GB, por lo que no vas a poder superar ese límite en ningún momento. Sin embargo, un entorno de 64 bits es capaz de manejar varios petabytes de información ( 1 PB = -redondeando-1.000.000 GB )
La verdad es que no se tanto del tema, solo se que en borland existe la clase AnsiString que es muy parecida a la string si no igual y que en la ayuda de C++Builder dice que el maximo son 2 Gb. La razon la desconocia pero me lo apunto

Cita:
Iniciado por eferion Ver Mensaje
Espero que no compares nunca dos char* con el operador '==', ya que únicamente estarás comparando la dirección de memoria de ambos punteros jejejeje.
Lo mismo digo, AnsiString si que lo permite y supongo que string tambien, aunque no la uso nunca, pero char* no, hay que usar strcmp, strncmp o comparar caracter a caracter a manita jejeje.
  #11 (permalink)  
Antiguo 17/03/2015, 09:01
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Necesito un método para validar números y letras

Cita:
Espero que no compares nunca dos char* con el operador '==', ya que únicamente estarás comparando la dirección de memoria de ambos punteros jejejeje.
Es verdad jajaj, se me paso. hay que usar strcomp si se trata de c. XD
Esta mañana es que me pillo con prisa.

En todo caso aun que en un string le entraran 2 gigas, a ver el que tiene cojones de teclear 2 gigas por teclado jajajajaja
  #12 (permalink)  
Antiguo 17/03/2015, 10:01
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Necesito un método para validar números y letras

Cita:
Iniciado por vangodp Ver Mensaje
En todo caso aun que en un string le entraran 2 gigas, a ver el que tiene cojones de teclear 2 gigas por teclado jajajajaja
eso a mano no hay quien lo llene jajaja. Eso si, infinito no es
  #13 (permalink)  
Antiguo 17/03/2015, 13:40
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Necesito un método para validar números y letras

infinito no es nada en informática, eso es obvio aguml. Exceptuando los bucles infinitos. :P
¿En todo caso estaría limitado por la ram no crees? Si no que se use listas y lo guarde en disco a ver si así es infinito. XD

Etiquetas: c++, codigos, letras, metodos, numeros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:07.