elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Frase sin espacios al principio ni al final en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Frase sin espacios al principio ni al final en lenguaje C.  (Leído 1,518 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Frase sin espacios al principio ni al final en lenguaje C.
« en: 27 Enero 2017, 21:35 pm »

Hola, saludos para todos.
El código que dejo a continuación es para validar que al ingresar el nombre y apellido de un alumno sea correcto.
Por el momento lo que verifico es:
Que tmp no quede vacío, si se pulsa <Enter> sin ingresar nada o si se se pulsa <Enter> después de pulsar <Espacio> una o varias veces. -
No debe haber espacios ni al principio ni al final de la frase ingresada. -
Citar
Si ingreso "  Roberto"  debería devolver "Roberto"
Si ingreso "  Roberto  "  debería devolver "Roberto"
Si ingreso "Roberto  "  debería devolver "Roberto"
El problema lo tengo con poner el final de cadena '\0' después del último carácter, si no hay
espacios en blanco fgets lo deja perfecto pero que pasa si el ingreso es:
Código
  1. [0] R
  2. [1] o
  3. [2] b
  4. [3] e
  5. [4] r
  6. [5] t
  7. [6] o
  8. [7]
  9. [8]
  10. [9] '\0'
  11.  
Concretamente como harían para pasar el elemento [9] al [7]

Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <ctype.h>    
  6.  
  7. void get_String( char *tmp );
  8. void ajustes( char *tmp );
  9. void mensajeError();
  10.  
  11. int main( void ){
  12. char tmp[30];    
  13.  
  14. get_String( tmp );
  15.  
  16. return EXIT_SUCCESS;
  17. }
  18.  
  19. void get_String( char *tmp ){
  20. int ok, i=0, espacios=0, espIzquierda=0;
  21.  
  22. do{
  23. ok=1;
  24. printf("\n Ingresa el nombre completo del alumno ......:" );
  25. fgets( tmp, 30, stdin );
  26. ajustes( tmp );
  27. while( tmp[i] != '\0' ){
  28. if( tmp[i] == 32 ){
  29. espacios++;
  30. }else{
  31. if( tmp[0] == 32 && espIzquierda == 0 ){
  32. espIzquierda = i;
  33. }
  34. }
  35. i++;
  36. }
  37. if( i == espacios ){
  38. ok=0; espacios=0; i=0;
  39. mensajeError();
  40. }
  41. }while( !ok );
  42. if( espIzquierda > 0 ){
  43. i=0;
  44. while( tmp[i] != '\0' ){
  45. tmp[i] = tmp[i+espIzquierda];
  46. i++;
  47. }
  48. }
  49. }
  50.  
  51. void ajustes( char *tmp ){
  52.        char *p = NULL;
  53.        int ch;
  54.  
  55.        if(( p=strchr( tmp , '\n'))){
  56.                *p='\0';
  57.        }else{
  58.                while((ch = getchar()) !='\n' && ch!=EOF);
  59.        }
  60. }
  61.  
  62. void mensajeError(){
  63. printf( "\n El dato es obligatorio" );
  64. printf( "\n\t Pulsa <Enter> para intentarlo nuevamente..." ); getchar();
  65. }

Por favor, no hacer caso a las librerías incluidas que es por tantas practicas. -

Saludos.


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.414


ASMático


Ver Perfil WWW
Re: Frase sin espacios al principio ni al final en lenguaje C.
« Respuesta #1 en: 27 Enero 2017, 22:46 pm »

Código
  1. tmp[i] = '\0'; // tmp[7] = '\0';
What else?


En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Frase sin espacios al principio ni al final en lenguaje C.
« Respuesta #2 en: 28 Enero 2017, 00:13 am »

Hola, Ivan.
No entiendo tu código, en mi ej. cuando salga del bucle no vale 7 vale 9 . -
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.414


ASMático


Ver Perfil WWW
Re: Frase sin espacios al principio ni al final en lenguaje C.
« Respuesta #3 en: 28 Enero 2017, 00:24 am »

Lo que tratas de hacer es un trim. El tema es recorrer la cadena desde el final hacia atras hasta encontrar un caracter que no sea espacio (índice i). Luego, pones el '\0' en (i+1). Y lo mismo desde el principio.

Hola, Ivan.
No entiendo tu código, en mi ej. cuando salga del bucle no vale 7 vale 9 . -
Ese 7 lo tienes que calcular, como puse arriba.
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Frase sin espacios al principio ni al final en lenguaje C.
« Respuesta #4 en: 28 Enero 2017, 03:18 am »

Ahora me queda claro y dejo como lo hice por si alguien tiene la misma duda que tenía yo. -

Código
  1. j=i-1;
  2. while( j >= 0 ){
  3. if( isalpha(tmp[j])){
  4. tmp[j+1] = '\0';
  5. break;
  6. }
  7. j--;
  8. }

Seguramente alguien tendrá una versión mejor, si desea postearla todos los que estamos aprendiendo muy agradecidos. -

Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como quitar los espacios al inicio y al final de una cadena
Programación C/C++
pefo 3 2,012 Último mensaje 14 Noviembre 2012, 15:33 pm
por djimenez39
Lenguaje C temas (en orden) que debo aprender para dominar este Lenguaje?
Programación C/C++
r_fercho 3 4,993 Último mensaje 8 Mayo 2014, 04:56 am
por r_fercho
invertir una frase en C
Programación C/C++
lucho666 2 5,718 Último mensaje 17 Octubre 2014, 18:00 pm
por lucho666
Se me ocurrio una frase « 1 2 »
Foro Libre
SeNeGe 12 2,539 Último mensaje 3 Septiembre 2015, 15:09 pm
por exploiterstack
SignAloud, unos guantes que traducen el lenguaje de signos a lenguaje verbal
Noticias
wolfbcn 0 489 Último mensaje 25 Abril 2016, 18:10 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines