C/Visual C - Copia de arrays

   
Vista:

Copia de arrays

Publicado por David (2 intervenciones) el 17/01/2015 16:27:16
Muy buenas a todos, tengo una pregunta simple y que no doy con la solución. Tengo un array cadena y tengo que crear otro array con los caracteres de la cadena, pero que nada mas introduzca las letras sin repetirlas. Por ejemplo: "valla" introducir en el otro array 'v','a','l'. Debe ser sencillo, pero no doy con la solución. Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Copia de arrays

Publicado por Chema (187 intervenciones) el 18/01/2015 21:06:23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(void) {
	char source[] =  "AkkkiiikkkikkkilllloaA";
	char dest[100];
	char *s ,*d, *p;
	s = source;
	d = dest;
	for (p = s; *p ; p = s++)
		if( *p != *s)
			*d++ = *p;
 
	*d++ = 0x0;
	printf("%s",dest);
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Copia de arrays

Publicado por Chema (187 intervenciones) el 19/01/2015 11:43:24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
 * Ejemplo sustituyendo repetidos en la matriz original.
 * /
int main(void) {
	char source[] =  "vvaallaa---111---222---333---444---vallaaa";
	char *s , *p;
	p = s = source;
	for (; *s ; s++) 
		if( *p != *s)
			*++p = *s;
	*++p = 0x0;
	printf("%s",source);
	return 0;
}

C es muy sencillo, sólo debes pensar como si fueras un puntero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Copia de arrays

Publicado por David (2 intervenciones) el 19/01/2015 13:04:31
Muchas gracias por contestar. El código que me pones no entiendo ni papa porque no lo a explicado el profesor jeje. Hice un apaño con un flag y funciona.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(i=0;frase[i];i++)
{
    flag=0;
    for(j=0;j<i;j++)
    {
        if(letras[j]==frase[i])
        {
            flag=1;
        }
    }
    if(flag==0)
    {
        letras[k]=frase[i];
        k++;
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copia de arrays

Publicado por Chema (187 intervenciones) el 19/01/2015 19:33:18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * Ejemplo sin el apañado y horroroso FLAG :)
 */
int main(void) {
	char frase[] =  "aabbccddeeffgghhiijjkk";
	char letras [100];
	int len = 0;
	int i ;
	int x = 0;
	len = strlen(frase);
 
	for (i = 0; i < len; i++){
		if (frase[i] != frase[i + 1]){
			letras[x] = frase[i] ;
			x++;
		}
	}
	letras[x] = 0x0;
	printf("%s",letras);
	return 0;
}

Fíjate en el detalle, Tú buscas los iguales, Yo encuentro las diferencias.

Moraleja, en C , No busques, encuentra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copia de arrays

Publicado por Tom (481 intervenciones) el 20/01/2015 12:09:44
Otra manera posible:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/* */
int main(int argc, char *argv[]) {
	char	*orig = "Pablito clavó un clavito";
	char	dest[strlen(orig) + 1];
	int		i, j;
 
	dest[0] = 0;
 
	for(i = 0, j = 0; orig[i]; i++) {
		if(strchr(dest, orig[i]) == NULL) {
			dest[j++] = orig[i];
			dest[j] = 0;
		}
	}
	printf("'%s' -> '%s'\n", orig, dest);
}

1
2
3
4
5
/tmp$ make kk
cc     kk.c   -o kk
/tmp$ ./kk
'Pablito clavó un clavito' -> 'Pablito cvóun'
/tmp$
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar