Autor
|
Tema: [C] [source] Revertir Cadenas (Leído 9,794 veces)
|
.::DoX::.
Desconectado
Mensajes: 4
|
Hola a todos... Bueno estoy comenzando a aprender a manejar C y he estado haciendo algunos códigos, así que aquí les dejo un pequeño código que hice para revertir el orden de una cadena. char * Revertir(char *Cadena, int tam) { int i; char *tmp; for (i = tam - 1; i >= 0; i--) { tmp[(tam-1)-i] = Cadena[i]; } tmp[tam] = '\0'; return tmp; }
Ejemplo de uso: #include <stdio.h> #include <stdlib.h> #include <string.h> char * Revertir(char *Cadena, int tam); int main() { char *hi = "Hola a todos"; char *res; res = Revertir (hi , strlen(hi )); }
Saludos
|
|
|
En línea
|
|
|
|
Khronos14
Desconectado
Mensajes: 443
A lie is a lie
|
Aquí te dejo mi versión, para que le eches un ojo #include <stdio.h> #include <string.h> void revertir(char * cadena) { unsigned int i = 0; char temp = NULL; unsigned int len = strlen(cadena ); for (; i < len / 2; i++) { temp = cadena[i]; cadena[i] = cadena[len - i - 1]; cadena[len - i - 1] = temp; } } int main(int argc, char * argv[]) { char cadena[] = "Esto es una cadena"; revertir(cadena); return 0; }
Puedes observar, que modifico el mismo puntero que se pasa como parámetro. Además sólo recorro la mitad del array, haciendo que la función sea mucho más rápida. Saludos.
|
|
|
En línea
|
|
|
|
.::DoX::.
Desconectado
Mensajes: 4
|
Gracias Khronos14 no se me había ocurrido de esa forma
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. Te dejo mi version: #define BYTE unsigned char BYTE* reverse(BYTE* pbyData, size_t szSize) { size_t i = 0x0; if (szSize > 1) for (;i < --szSize; i++) { pbyData[i] ^= pbyData[szSize]; pbyData[szSize] ^= pbyData[i]; pbyData[i] ^= pbyData[szSize]; } return pbyData; } int main() { char szCadena[] = "Hola Mundo"; return 0; }
|
|
« Última modificación: 20 Agosto 2011, 07:45 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
escabe
Desconectado
Mensajes: 34
|
¿Y por qué no usar ANSI C? Saludos.
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
¿Y por qué no usar ANSI C? Saludos. Se esta usando ANSI C, quizas querias decir "la libreria de C" strrev solo funciona con strings, encambio mi funcion funciona con una longitud dada. Dulces Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Queta
Desconectado
Mensajes: 267
|
¿Y el porqué de esta macro tan innecesaria?
|
|
« Última modificación: 18 Agosto 2011, 20:20 pm por Queta »
|
En línea
|
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
¿Y el porqué de esta macro tan innecesaria?
leete esto: macrosHasta donde he visto la bibioteca string.h no tiene definida strrev como macro * Trato de cadenas, codificacion, Busqueda de patrones, palabras capicua, palindromos... y un largo etc, no se debe usar de manera explicita este algorimo, puede ser acoplado de igual manera a X indole. Dulces Lunas!¡.
|
|
« Última modificación: 19 Agosto 2011, 00:18 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
escabe
Desconectado
Mensajes: 34
|
Se esta usando ANSI C, quizas querias decir "la libreria de C"
Si, tienes razón... strrev solo funciona con strings, encambio mi funcion funciona con una longitud dada.
Sin desmerecer tu código BlackZeroX▓▓▒▒░░, el título del hilo... ¿No se refería a cadenas? Y el código inicial ¿No iba enfocado a cadenas de texto? Para este caso yo uso strrevSaludos.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Bueno estoy comenzando a aprender a manejar C y he estado haciendo algunos códigos, así que aquí les dejo un pequeño código que hice para revertir el orden de una cadena. char * Revertir(char *Cadena, int tam) { int i; char *tmp; for (i = tam - 1; i >= 0; i--) { tmp[(tam-1)-i] = Cadena[i]; } tmp[tam] = '\0'; return tmp; }
En la función tienes un error al reservar memoria para "tam" caracteres ya que falta espacio para un carácter (para el '\0'), aparte de eso no es necesaria la conversión explicita. Con la corrección mas algunos cambios (todos ellos menores): char *invertir(char const *cad, int num_chars) { char *tmp; int i; for (i = 0; i < num_chars; i++) tmp[i] = cad[num_chars - 1 - i]; tmp[i] = '\0'; return tmp; }
---- ¿Y por qué no usar ANSI C? Esa función no es parte de la biblioteca estándar de C. ---- ¿Y el porqué de esta macro tan innecesaria? leete esto: macrosSeria mejor evita esa macro y en su lugar utilizar el tipo "char". Ello porque en C una cadena literal como "hola, mundo" es de tipo "array N of char". Aqui el problema es: si el tipo "char" es equivalente a "signed char" o "unsigned char" depende de la implementancion. Un saludo
|
|
|
En línea
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
cifrar y Descencriptar cadenas (source)
Programación Visual Basic
|
vivachapas
|
3
|
4,299
|
2 Noviembre 2008, 00:33 am
por vivachapas
|
|
|
[SOURCE] Codificador de cadenas :P (act)
Programación Visual Basic
|
79137913
|
0
|
1,861
|
7 Febrero 2011, 19:04 pm
por 79137913
|
|
|
Revertir ReFOX XI
Ingeniería Inversa
|
k!k3
|
1
|
4,211
|
3 Junio 2017, 00:34 am
por MCKSys Argentina
|
|
|
[Ayuda]Hay manera de revertir takeown e icacls?
Windows
|
Aquastripe
|
2
|
3,012
|
22 Octubre 2018, 02:11 am
por EdePC
|
|
|
revertir un String
Java
|
raulcerro99
|
4
|
2,689
|
19 Febrero 2019, 19:29 pm
por raulcerro99
|
|