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

Validar espacios y caracteres especiales

Estas en el tema de Validar espacios y caracteres especiales en el foro de C/C++ en Foros del Web. Buenas hice un código para validar letras y números pero también quiero validar lo que son los caracteres especiales como la 'ñ' y los espacios ...
  #1 (permalink)  
Antiguo 21/05/2015, 01:12
Avatar de Cardo2095  
Fecha de Ingreso: marzo-2015
Ubicación: En mi casa
Mensajes: 18
Antigüedad: 9 años, 1 mes
Puntos: 0
Sonrisa Validar espacios y caracteres especiales

Buenas hice un código para validar letras y números pero también quiero validar lo que son los caracteres especiales como la 'ñ' y los espacios intermedios ya que me generan error si los introduzco en los metodos.


Código PHP:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;



bool validarNum(char num[]){
    
int i=0;
    
int tam=strlen(num);
    
    while(
i<tam){
        if(
isdigit(num[i]))
            
i++;
        else
            return 
false;
    }
    return 
true;
}

bool validarLet(char let[]){
    
int i=0;
    
int tam=strlen(let);
    
    while(
i<tam){
        if(
isalpha(let[i]))
            
i++;
        else
            return 
false;
    }
    return 
true;
}


void ingresarNum(){
    
    
char n[20]; 
    do{
    
        
system("cls");
        
cout<<"Ingrese un numero: ";
        
cin>>n;
 
        if(
validarNum(n)==false)
            
cout<<"Solo se Aceptan Numeros"<<endl;
   
        else
            
cout<<"Es un Numero :D"<<endl;
            
        
system("pause");

    }while(
validarNum(n)==false);
}

void ingresarLet(){
    
char n[20]; 
    do{
        
system("cls");
        
cout<<"Ingrese una letra: ";
        
cin>>n;

        if(
validarLet(n)==false)
            
cout<<"Solo se Aceptan Letras"<<endl;

        else
            
cout<<"Es una Letra :D"<<endl;
    
        
system("pause");

    }while(
validarLet(n)==false);
}


void Menu(){
    
int salir=0;
    
string op;
    do{
        
system("cls");
        
cout<<"///////////////VALIDACION DE NUMEROS Y LETRAS//////////////"<<endl;
        
cout<<"\n";
        
cout<<"1->Comprobar Numero"<<endl;
        
cout<<"2->Comprobar Letra"<<endl;
        
cout<<"3->SALIR"<<endl;
        
cin>>op;
        
int x=atoi(op.c_str());//convierte el string en un numero

        
switch(x){
        case 
1:{
            
ingresarNum();
            break;}
        case 
2:{
            
ingresarLet();
            break;}
        case 
3:{
            
salir=1;
            
cout<<"Saliendo..."<<endl;
            break;}
        default:{
            
system("cls");
            
cout<<"OPCION INCORRECTA"<<endl;
            
system("pause");
            break;}
        }
        
cin.get();
    }
    while(
salir==0);
}


int main(int argcchar *argv[]) {
    
Menu();
    return 
EXIT_SUCCESS;

  #2 (permalink)  
Antiguo 21/05/2015, 08:28
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 27
Respuesta: Validar espacios y caracteres especiales

Para validar los espacios puedes hacer un or lógico con la función isspace(char c) de <cctype> que devuelve true si es un espacio tabulador o cualquier cosa del estilo. Para añadir la ñ depende de la codificación que esté utilizando tu consola. Prueba alguna de las dos siguientes a ver si hay suerte. Si no, depura algún código simple y averigua cuales son los valores de las Ñ y ñ y como trata esos caracteres tus compilador.

Código C++:
Ver original
  1. bool validarLet(char let[]){
  2.     int i=0;
  3.     int tam=strlen(let);
  4.    
  5.     while(i<tam){
  6.         if(isalpha(let[i])||isspace(let[i])||let[i]==164||let[i]==165)
  7.             i++;
  8.         else
  9.             return false;
  10.     }
  11.     return true;
  12. }


Código C++:
Ver original
  1. bool validarLet(char let[]){
  2.     int i=0;
  3.     int tam=strlen(let);
  4.    
  5.     while(i<tam){
  6.         if(isalpha(let[i])||isspace(let[i])||let[i]=='\361'||let[i]=='\321')
  7.             i++;
  8.         else
  9.             return false;
  10.     }
  11.     return true;
  12. }
  #3 (permalink)  
Antiguo 21/05/2015, 23:37
Avatar de Cardo2095  
Fecha de Ingreso: marzo-2015
Ubicación: En mi casa
Mensajes: 18
Antigüedad: 9 años, 1 mes
Puntos: 0
Mensaje Respuesta: Validar espacios y caracteres especiales

men incluso usándolo como me dijiste aún no me lo valida :/ quiero que no se pueda meter espacios en medio de las cadenas y sobre lo de las ñ me refería no solo a la ñ sino que también a valores como °,?,ñ,...etc.
  #4 (permalink)  
Antiguo 22/05/2015, 00:38
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 27
Respuesta: Validar espacios y caracteres especiales

Lo había entendido mal entonces, si no quieres que haya espacios tienes que utilizar cin.get() a la hora de leer los datos y para lo de las codificaciones espaciales si no sé tu compilador no te puedo ayudar demasiado.
  #5 (permalink)  
Antiguo 22/05/2015, 01:52
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: Validar espacios y caracteres especiales

uso visual studio 2010 y el 2013, en este ejemplo estoy usando el 2010
  #6 (permalink)  
Antiguo 22/05/2015, 05:24
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 27
Respuesta: Validar espacios y caracteres especiales

Entonces apóyate de esto para los caracteres especiales:
en vez de utilizar isalpha utiliza la siguiente función
Código C++:
Ver original
  1. bool esp_isalpha(const char &c){
  2.     switch(c){
  3.     case -92: // ñ
  4.     case -91: // Ñ
  5.     case -96: // á
  6.     case -75: // Á
  7.     case -126: // é
  8.     case -112: // É
  9.     case -95: // í
  10.     case -42: // Í
  11.     case -94: // ó
  12.     case -32: // Ó
  13.     case -93: // ú
  14.     case -23: // Ú
  15.     case -127: // ü
  16.     case -102: // Ü
  17.         return true;
  18.         break;
  19.     default: return isalpha(c);
  20.  
  21.     }
  22. }

Etiquetas: caracteres, char, espacios, especiales, int, numero
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 23:33.