Puntero de cadena en c

Puntero de cadena en c
Una cadena no es más que una matriz de caracteres que contiene todos los tipos de caracteres de valores de tipo de datos. A través de la cadena, podemos acceder a cualquier carácter con su índice no. de una manera muy rápida. Hoy nuestro tema es que podemos acceder a una cadena a través de un puntero. Se llama un puntero de cadena. Explicaremos cómo el puntero nos ayudará a acceder a todo el índice de una cadena.

Acceso a la cadena a través del puntero

Char Pointer:

  • La cadena se almacena en una matriz de char.
  • Char s [10] = "computadora",
  • Char Pointer puede apuntar a Char Block.
  • Char *p; p = & s [0], p+1 = 1001, representa la dirección del siguiente bloque.

*(p+i) = s []

Explicación

En el diagrama anterior, supongamos que dibujamos un puntero que es un carácter de tipo y declaramos una cadena cuya dirección base es 1001. Entonces, la dirección del siguiente bloque es 1002. Porque cada valor de tipo de carácter contiene 1 byte en la memoria, si la dirección base del 1calle El bloque es 1001, por lo que la dirección del siguiente bloque debe ser 1002 y así sucesivamente. Ahora, Pointer P tiene la dirección del 1calle bloque significa la dirección base de esa cadena en particular. Significa que el valor de un puntero es 1001. A través de esta dirección base, podemos acceder a todos los elementos de la cadena fácilmente.

Cadena constante

  • String literal = string constant // string
  • Printf ("computadora"); [que escribimos en "" que se llama cadena constante o literal o cadena]
  • Char s [10] = "computadora";
  • Printf (s); solo escribir s significa que representa la dirección del primer bloque de la matriz s []. Significa que aquí pasamos 1000 una dirección del primer bloque de la matriz [].
  • Strlen (s); Pasamos la dirección del primer bloque de Array S [].
  • Strlen (& s [0]) = strlen (s) = strlen ("computadora");

Ejemplo 1

En este ejemplo, podemos ver a través del puntero que podemos calcular la longitud total de la cadena.

#incluir
int longitud (char *p)

int count = 0;
mientras ( *P != '\ 0')

contar ++;
p ++;

recuento de retorno;

int main ()

char str [100]; // declarando una cadena.
int l;
printf ("\ n Ingrese cualquier cadena:");
obtiene (str);
l = longitud (str); // longitud de la cadena.
printf ("\ n la longitud de la cadena dada: %d \ n", l);
regresar 0;

Producción

Explicación

Aquí definimos los nombres de funciones longitud (). En esta función, usamos un bucle de tiempo donde se da una condición de que el bucle no se terminará hasta que el puntero *pag puede acceder a todos los elementos de la cadena. En la función Main (), declaramos una cadena llamada STR [] para tomar una cadena del usuario. Ahora pasamos la cadena dentro del paréntesis de la función de longitud () para calcular la longitud de la cadena.

Ejemplo-2

Aquí veremos a través del puntero podemos revertir una cadena.

#incluir
Void Reverse (char [], int, int);
int main ()

char str [100], temp; // declarando una cadena.
int i, J, Len;
printf ("\ n Por favor ingrese cualquier cadena:");
obtiene (str);
len = strlen (str);
reverso (str, 0, len - 1); // invirtiendo la cadena.
printf ("\ n cadena después de revertir = %s \ n", str);
regresar 0;

Void Reverse (char str [], int i, int len)

char temp;
temp = str [i];
Str [i] = str [len - i];
Str [len - i] = temp;
if (i == len/2)

devolver ;

reverso (str, i + 1, len);

Producción

Explicación

Aquí dentro de la función principal (), declaramos una cadena llamada str [] y tomamos una cadena del usuario con la ayuda de la función gets (), excepto que definimos una función nombrada contrarrestar () Para revertir la cadena a través de un puntero que puede acceder a los valores de STR [].

Ejemplo-3

Aquí veremos a través del puntero podemos copiar una cadena.

#incluir
/ * Prototipo de función */
copia vacía (char s2 [30], char s1 [30]);
/* Función principal */
int main ()

Char S1 [30], S2 [30];
int i;
printf ("Ingrese la cadena: \ n");
obtiene (S1);
copia (S2, S1);
printf ("La cadena copiada es: %s \ n", s2);
regresar 0;

/* Definición de función*/
Copia vacía (Char S2 [30], Char S1 [30])

int i;
para (i = 0; s1 [i] != '\ 0'; i ++)

s2 [i] = s1 [i];

s2 [i] = '\ 0';

Producción

Explicación

Aquí dentro de la función principal (), declaramos dos cadenas llamadas S1 [] y S2 [] y tomamos una cadena del usuario con la ayuda de la función gets () en la cadena S1 []. Excepto que definimos una función llamada Copiar () Para copiar la cadena de S1 [] a String S2 [] a través de un puntero que puede acceder a los valores de la cadena S1 [].

Ejemplo-4

Aquí veremos a través del puntero que podemos comparar una cadena con otra cadena.

#incluir
// función que compara las dos cadenas
Comparaciones vacías (char* x, char* y)

int flag = 0;
// iterar un bucle hasta el final
// de ambas cuerdas
mientras (*x != '\ 0' || *y != '\ 0')
if ( *x == *y)
x ++;
y ++;

// Si dos caracteres no son iguales
// Imprima la diferencia y salga
else if (( *x == '\ 0' && *y != '\ 0')
|| (*X != '\ 0' && *y == '\ 0')
|| *X != *y)
bandera = 1;
printf ("Strings desiguales \ n");
romper ;


// Si dos cuerdas son exactamente las mismas
if (flag == 0)
printf ("Strings \ n");


// Código de controlador
int main ()

// Dadas cadenas S1 y S2
char s1 [20] = "Python";
char s2 [20] = "dsa";
// Llamada de función
comparaciones (S1, S2);
regresar 0;

Producción

Explicación

Aquí dentro de la función principal () declaramos dos cadenas llamadas S1 [] y S2 []. En S1 [], asignamos un valor llamado "pitón" y en s2 [] llamado "DSA. " Excepto que definimos una función llamada comparar () Para comparar la cadena de S1 [] y la cadena de S2 [] a través del puntero que puede acceder a los valores de String S1 [] y String S2 [] para comparar ambas cadenas entre sí. Como dos cadenas son diferentes aquí, la salida de la cadena es una cuerda desigual.

Conclusión

En este tema, cubrimos todos los aspectos del puntero de cuerdas muy en serio para comprender el concepto del puntero de cadena. Es muy comprensible que a través de un puntero, podamos acceder fácilmente a todo el índice de la cadena muy rápido y fácil de hacer que el código sea robusto.