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