ayuda principiante C

Iniciado por marinobeach, 29 Enero 2014, 15:18 PM

0 Miembros y 1 Visitante están viendo este tema.

marinobeach

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,'  ');

vangodp

#1
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:

rir3760

Cita de: marinobeach en 29 Enero 2014, 15:18 PMtengo 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|.

El programa corregido (pero todavía con la función gets, hay que sustituirla por fgets):
#include <stdio.h>
#include <stdlib.h>

#define NUM_CHARS  20

int main(void)
{
   char ori[NUM_CHARS];
   char dst[NUM_CHARS];
   char sep[NUM_CHARS];
   int i;
   int j;
   int k;
   
   puts("Tecleala cadena de prueba:");
   gets(ori);
   
   puts("Teclea los caractere a eliminar:");
   gets(sep);
   
   k = 0;
   for (i = 0; ori[i] != '\0'; i++){
      for (j = 0;  sep[j] != '\0' && sep[j] != ori[i]; j++)
         ;
     
      if (sep[j] == '\0')
         dst[k++] = ori[i];
   }
   dst[k] = '\0';

   printf("La cadena modificada es %s\n", dst);
   
   return EXIT_SUCCESS;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language