Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: marinobeach en 29 Enero 2014, 15:18 pm



Título: ayuda principiante C
Publicado por: marinobeach en 29 Enero 2014, 15:18 pm
Hola buenas, tengo que implementar un par de funciones. Pruebo las funciones por separadas y la primera funcion no me funciona. Simplemente quiero eliminar los caracteres especificados por el usuario de una cadena de caracteres y luego pasar la cadena limpia a otra.
Os dejo el codigo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
 *
 */
int main(int argc, char** argv) {
    char ori[20], dst[20], seps[5];
    int i = 0, j = 0, tam = 19;
    printf("cual es tu cadena de caracteres??\n");
    gets(ori);
    printf("introduce los caracteres a eliminar\n");
    gets(seps);
   
    for (i = 0; i <= tam; i++) {
        for (j = 0;  j < 5;  j++) {
            if ( strcmp ( ori,  seps[j] ) )   
                {
                    strcpy ( ori,'  ');
                }
            }
        }
        strcpy ( dst, ori );
        printf("tu nueva cadena de caracteres es %s \n" , dst);
    return (EXIT_SUCCESS);
}



me salen warnings en #include <string.h>
                                   if ( strcmp ( ori,  seps[j] ) )
                                  strcpy ( ori,'  ');


Título: Re: ayuda principiante C
Publicado por: vangodp en 29 Enero 2014, 15:58 pm
veo cosas que no entiendo :/
intentas comparar una posicion en concreto de la cadena seps[posicion] con toda una cadena(ori)
 ori,  seps[j]

en todo caso comparar seria: ori[contadorfor1], seps[contadorfor2] ¿no?
No lo entiendo.

despues lo mismo con strcpy intentas copiar un espacio (char) pero no le dices donde encajar dentro de ori[?].
¿strcmp no compara cadenas completas? O sirve para ver si hay "espacio" en toda una cadena?

' ' ---> ori[0]?, ori[1]?, ori[2]?.... ¿En que posición va?
¿Eso se puede hacer?
¿Seria algo como: char A[10] = {' '};?
No tengo certeza si se puede hacer. :/
Creo que tengo mas dudas que tu  :laugh:


Título: Re: ayuda principiante C
Publicado por: rir3760 en 29 Enero 2014, 16:10 pm
tengo que implementar un par de funciones. Pruebo las funciones por separadas y la primera funcion no me funciona. Simplemente quiero eliminar los caracteres especificados por el usuario de una cadena de caracteres y luego pasar la cadena limpia a otra.
Problemas con el programa hay bastantes empezando por asumir que la longitud de las cadenas siempre sera la máxima y utilizar las funciones strcmp y strcpy para procesar caracteres cuando esto no es necesario (puedes utilizar los operadores de asignación y comparación sin problemas). Por ultimo se debe evitar el uso de la función gets, las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

El programa corregido (pero todavía con la función gets, hay que sustituirla por fgets):
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM_CHARS  20
  5.  
  6. int main(void)
  7. {
  8.   char ori[NUM_CHARS];
  9.   char dst[NUM_CHARS];
  10.   char sep[NUM_CHARS];
  11.   int i;
  12.   int j;
  13.   int k;
  14.  
  15.   puts("Tecleala cadena de prueba:");
  16.   gets(ori);
  17.  
  18.   puts("Teclea los caractere a eliminar:");
  19.   gets(sep);
  20.  
  21.   k = 0;
  22.   for (i = 0; ori[i] != '\0'; i++){
  23.      for (j = 0;  sep[j] != '\0' && sep[j] != ori[i]; j++)
  24.         ;
  25.  
  26.      if (sep[j] == '\0')
  27.         dst[k++] = ori[i];
  28.   }
  29.   dst[k] = '\0';
  30.  
  31.   printf("La cadena modificada es %s\n", dst);
  32.  
  33.   return EXIT_SUCCESS;
  34. }

Un saludo