Consideremos el siguiente programa.
C
#include<stdio.h> void swap(char *str1, char *str2) { char *temp = str1; str1 = str2; str2 = temp; } int main() { char *str1 = "geeks"; char *str2 = "forgeeks"; swap(str1, str2); printf("str1 is %s, str2 is %s", str1, str2); getchar(); return 0; }
La salida del programa es str1 es geeks, str2 es forgeeks . Entonces, la función swap() anterior no intercambia strings. La función solo cambia las variables de puntero locales y los cambios no se reflejan fuera de la función. Veamos las formas correctas de intercambiar strings:
Método 1 (intercambiar punteros) Si está utilizando un puntero de carácter para strings (no arrays), cambie str1 y str2 para señalar los datos del otro. es decir, intercambiar punteros. En una función, si queremos cambiar un puntero (y obviamente queremos que los cambios se reflejen fuera de la función), entonces necesitamos pasar un puntero al puntero.
C
#include<stdio.h> /* Swaps strings by swapping pointers */ void swap1(char **str1_ptr, char **str2_ptr) { char *temp = *str1_ptr; *str1_ptr = *str2_ptr; *str2_ptr = temp; } int main() { char *str1 = "geeks"; char *str2 = "forgeeks"; swap1(&str1, &str2); printf("str1 is %s, str2 is %s", str1, str2); getchar(); return 0; }
Este método no se puede aplicar si las strings se almacenan mediante arrays de caracteres.
Método 2 (Intercambiar datos) Si está utilizando arrays de caracteres para almacenar strings , la forma preferida es intercambiar los datos de ambas arrays.
C
#include<stdio.h> #include<string.h> #include<stdlib.h> /* Swaps strings by swapping data*/ void swap2(char *str1, char *str2) { char *temp = (char *)malloc((strlen(str1) + 1) * sizeof(char)); strcpy(temp, str1); strcpy(str1, str2); strcpy(str2, temp); free(temp); } int main() { char str1[10] = "geeks"; char str2[10] = "forgeeks"; swap2(str1, str2); printf("str1 is %s, str2 is %s", str1, str2); getchar(); return 0; }
Este método no se puede aplicar a las strings almacenadas en un bloque de memoria de solo lectura.
Complejidad de tiempo: O(N)
Espacio Auxiliar: O(N)
Escriba comentarios si encuentra algo incorrecto en el artículo anterior o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA