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

Duda sencilla de cadena con punteros en C

Estas en el tema de Duda sencilla de cadena con punteros en C en el foro de C/C++ en Foros del Web. Estoy trabajando en el lenguaje C, y tengo la siguiente función: Código: void QuitaEspacios(char *s) { while (*s != '\0') { if (*s == ' ...
  #1 (permalink)  
Antiguo 05/08/2014, 13:56
 
Fecha de Ingreso: agosto-2014
Mensajes: 10
Antigüedad: 10 años, 4 meses
Puntos: 0
Duda sencilla de cadena con punteros en C

Estoy trabajando en el lenguaje C, y tengo la siguiente función:

Código:
void QuitaEspacios(char *s) 
{ 
    while (*s != '\0') 
    { 
        if (*s == ' ') 
        { 
            *s = *(s+1);
        } 

        printf("%c", *s); 
        s++; 
    } 


}

Tengo q hacer una funcion q te quite los espacios de la cadena.
El programa me da error cuando la cadena se encuentra con un espacio...

q hago??
  #2 (permalink)  
Antiguo 05/08/2014, 14:38
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Duda sencilla de cadena con punteros en C

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. void QuitaEspacios(char *s){
  6.     int contador  = 0;
  7.     int contador2 = 0;    
  8.     while ( s[contador] != '\0'){
  9.         //si encuantra un espacio en la posicion actual...    
  10.         if (s[contador] == ' '){
  11.             contador2 = contador;
  12.             //..traemos toda la cadena restante una casilla adelante y...
  13.             do{
  14.                 s[contador2] = s[contador2+1];
  15.                 contador2++;
  16.             } while( s[contador2] != '\0' );
  17.             //traemos tambien el \0 una casilla adelante por si queremos hacer otras comprobaciones posteriores.
  18.             s[contador2] = s[contador2+1];
  19.         }
  20.  
  21.         printf("%s\n", s);
  22.         contador++;
  23.     }
  24. }
  25.  
  26. int main (){
  27.     char cadena[]={"a b c d e"};
  28.     QuitaEspacios(cadena);
  29.    
  30.    
  31.     getchar();
  32.     return 0;
  33. }

A ver si esto te sirve ;)
suerte!

Última edición por vangodp; 05/08/2014 a las 14:50
  #3 (permalink)  
Antiguo 05/08/2014, 15:04
 
Fecha de Ingreso: agosto-2014
Mensajes: 10
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Duda sencilla de cadena con punteros en C

gracias por la ayuda vangopd.

Lo que pasa q el profe dijo qse hiciera con puntero y aritmetica de punteros...q es como no me sale a mi :(
  #4 (permalink)  
Antiguo 05/08/2014, 23:29
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: Duda sencilla de cadena con punteros en C

Cita:
Iniciado por Lauri23 Ver Mensaje
.............................
Tengo q hacer una funcion q te quite los espacios de la cadena.
El programa me da error cuando la cadena se encuentra con un espacio...

q hago??
Reservar memoria para la cadena original en la función main, algo como:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. void CopiaCadena ( char *str1 ) ;
  4.  
  5. int main( ) {
  6.   char *str1 ;
  7.   str1 =  malloc ( 100 * sizeof ( char ) ) ;
  8.   if ( str1 == NULL ) {
  9.     printf ( "Error de memoria" ) ;
  10.     return 1 ;
  11.   }
  12.   printf ("Introduce una frase: ");
  13.   fgets ( str1 , 100, stdin ) ;
  14.   CopiaCadena ( str1 ) ;
  15.   printf( " Copia : %s\n" , str1 );
  16.   return 0 ;
  17. }
  18.  
  19. void CopiaCadena ( char *s ) {
  20.   while (*s != '\0') {
  21.     if (*s == ' ')
  22.    *s = *( s + 1 ) ;
  23.     s++ ;
  24.   }
  25.   *s = '\0' ;
  26. }

¡¡¡Saluditos!!!

  #5 (permalink)  
Antiguo 05/08/2014, 23:35
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: Duda sencilla de cadena con punteros en C

Es decir,te debía faltar algo como:

Código C++:
Ver original
  1. str1 =  malloc ( 100 * sizeof ( char ) ) ;

Última edición por leosansan; 05/08/2014 a las 23:41
  #6 (permalink)  
Antiguo 06/08/2014, 10:36
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 18 años, 5 meses
Puntos: 32
Respuesta: Duda sencilla de cadena con punteros en C

Cita:
Iniciado por Lauri23
gracias por la ayuda vangopd.

Lo que pasa q el profe dijo qse hiciera con puntero y aritmetica de punteros...q es como no me sale a mi :(
Una manera seria así:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. void QuitaEspacios(char *s)
  4. {
  5.    char *p = s; /* p al inicio apunta al principio de la cadena */
  6.  
  7.    /* Se irá leyendo de s y se irá escribiendo en p.                     *
  8.     * s irá incrementando en cada repetición del bucle.                  *
  9.     * p sólo incrementará al añadirle un carácter que no sea un espacio. *
  10.     */
  11.  
  12.    /* se recorre la cadena s hasta que se llegue al final '\0' */
  13.    while (*s != '\0')
  14.    {
  15.       if (*s != ' ')
  16.       {
  17.          *p = *s;
  18.          p++;
  19.       }
  20.  
  21.         /*printf("%c", *s); */
  22.         s++;
  23.    }
  24.    /* finalmente añadirle el caracter de fin de cadena */
  25.    *p = '\0';
  26.  
  27. }
  28.    
  29. int main(void)
  30. {
  31.    char cadena[] = "Esto es    una cadena   con espacios  ";
  32.    printf("cadena antes:   %s\n", cadena);
  33.  
  34.    /* modifica la cadena quitandole los espacios */
  35.    QuitaEspacios(cadena);
  36.    printf("cadena despues: %s\n", cadena);
  37.  
  38.    return 0;
  39. }

Pero sintetizando puede quedar así:
Código C:
Ver original
  1. void QuitaEspacios(char *s)
  2. {
  3.    char *p = s;
  4.  
  5.    while ((*p = *s++) != '\0')
  6.       if (*p != ' ') p++;
  7. }
Un saludo!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 06/08/2014 a las 10:56

Etiquetas: cadena, funcion, programa, punteros, sencilla
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 20:16.