Dominar los punteros de caracteres y el uso de funciones en C
¿Qué es un puntero de carácter en C?
Un puntero de carácter almacena la dirección de un tipo de carácter o la dirección del primer carácter de una matriz de caracteres (cadena). Los punteros de caracteres son muy útiles cuando trabajas para manipular las cadenas.
No hay ningún tipo de datos de cadena en C. Una matriz de tipo "char" se considera una cadena. Por lo tanto, un puntero de una matriz de tipo char representa una cadena. Este puntero de carácter se puede pasar como argumento a una función para procesar la cadena.
Declaración de un puntero de carácter
Un puntero de carácter apunta a un carácter o una matriz de caracteres. Por tanto, para declarar un puntero de carácter, utilice la siguiente sintaxis:
char *pointer_name;
Inicialización de un puntero de carácter
Después de declarar un puntero de carácter, debe inicializarlo con la dirección de una variable de carácter. Si hay una matriz de caracteres, simplemente puede inicializar el puntero de caracteres proporcionando el nombre de la matriz de caracteres o la dirección de los primeros elementos de la misma.
Puntero de carácter de carácter
La siguiente es la sintaxis para inicializar un puntero de carácter de un tipo de carácter:
char *pointer_name = &char_variable;
Puntero de caracteres de matriz de caracteres
La siguiente es la sintaxis para inicializar un puntero de carácter de una matriz de caracteres (cadena):
char *pointer_name = char_array; /*or*/ char *pointer_name = &char_array[0];
Ejemplo de puntero de carácter
En el siguiente ejemplo, tenemos dos variables carácter y matriz de caracteres. Estamos tomando dos variables de puntero para almacenar las direcciones del carácter y la matriz de caracteres, y luego imprimimos los valores de las variables usando los punteros de caracteres.
#include <stdio.h>
int main() {
// Declare two variables
char x = 'P';
char arr[] = "TutorialsPoint";
// Declaring character pointers
char *ptr_x = &x;
char *ptr_arr = arr;
// Printing values
printf("Value of x : %c\n", *ptr_x);
printf("Value of arr: %s\n", ptr_arr);
return 0;
}
Salida
Ejecute el código y verifique su salida -
Value of x : P Value of arr: TutorialsPoint
Comprensión del puntero de carácter
Una cadena se declara como una matriz de la siguiente manera:
char arr[] = "Hello";
La cadena es una matriz de caracteres terminada en NULL. El último elemento de la matriz anterior es un carácter NULL (\0).
Declare un puntero de tipo char y asígnele la dirección del carácter en la posición 0 −
char *ptr = &arr[0];
Recuerde que el nombre de la matriz en sí es la dirección del elemento 0.
char *ptr = arr;
Se puede declarar una cadena usando un puntero en lugar de una variable de matriz (sin corchetes).
char *ptr = "Hello";
Esto hace que la cadena se almacene en la memoria y su dirección se almacene en ptr. Podemos recorrer la cadena incrementando el ptr.
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
Acceder a la matriz de caracteres
Si imprime una matriz de caracteres usando el especificador de formato %s, puede hacerlo usando el nombre del puntero de carácter. Pero si desea acceder a cada carácter de la matriz de caracteres, debe usar un asterisco (*) antes del nombre del puntero del carácter y luego incrementarlo.
Ejemplo
Aquí está el código completo del programa:
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
}
Salida
Ejecute el código y verifique su salida -
Character Pointers and Functions in C
Ejemplo
Alternativamente, pase ptr a printf() con formato %s para imprimir la cadena.
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
printf("%s", ptr);
}
Salida
Al ejecutar este código, obtendrá el mismo resultado:
Character Pointers and Functions in C
Funciones de puntero de caracteres
Los archivos de encabezado "string.h" definen una serie de funciones de biblioteca que realizan procesamiento de cadenas, como encontrar la longitud de una cadena, copiar una cadena y comparar dos cadenas. Estas funciones utilizan argumentos de puntero char.
La función strlen()
La función strlen() devuelve la longitud, es decir, el número de caracteres de una cadena. El prototipo de la función strlen() es el siguiente:
int strlen(char *)
Ejemplo 1
El siguiente código muestra cómo se puede imprimir la longitud de una cadena:
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Hello";
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", strlen(ptr));
return 0;
}
Cuando ejecute este código, producirá el siguiente resultado:
Given string: Hello Length of the string: 5
Ejemplo 2
Efectivamente, la función strlen() calcula la longitud de la cadena según la función definida por el usuario str_len() como se muestra a continuación:
#include <stdio.h>
#include <string.h>
int str_len(char *);
int main(){
char *ptr = "Welcome to Tutorialspoint";
int length = str_len(ptr);
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", length);
return 0;
}
int str_len(char *ptr){
int i = 0;
while(*ptr != '\0'){
i++;
ptr++;
}
return i;
}
Cuando ejecute este código, producirá el siguiente resultado:
Given string: Welcome to Tutorialspoint Length of the string: 25
La función strcpy()
El operador de asignación ( =) no se utiliza para asignar un valor de cadena a una variable de cadena, es decir, un puntero de carácter. En su lugar, necesitamos usar la función strcpy() con el siguiente prototipo:
char * strcpy(char * dest, char * source);
Ejemplo 1
El siguiente ejemplo muestra cómo puede utilizar la función strcpy() −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "How are you doing?";
char *ptr1;
strcpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
La función strcpy() devuelve el puntero a la cadena de destino ptr1.
How are you doing?
Ejemplo 2
Internamente, la función strcpy() implementa la siguiente lógica en la función str_cpy() definida por el usuario:
#include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main(){
char *ptr = "Using the strcpy() Function";
char *ptr1;
str_cpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
void str_cpy(char *d, char *s){
int i;
for(i = 0; s[i] != '\0'; i++)
d[i] = s[i];
d[i] = '\0';
}
Cuando ejecute su código, producirá el siguiente resultado:
Using the strcpy() Function
La función copia cada carácter de la cadena de origen al destino hasta que se alcanza el carácter NULL "\0". Después del bucle, agrega un carácter "\0" al final de la matriz de destino.
La función strcmp()
Los operadores de comparación habituales (<,>, <=,>=, ==y !=) no pueden usarse para comparar dos cadenas. En su lugar, necesitamos usar la función strcmp() del archivo de encabezado "string.h". El prototipo de esta función es el siguiente:
int strcmp(char *str1, char *str2)
La función strcmp() tiene tres valores de retorno posibles:
- Cuando se encuentra que ambas cadenas son idénticas, devuelve "0".
- Cuando el primer carácter que no coincide en str1 tiene un valor ASCII mayor que el carácter correspondiente en str2, la función devuelve un número entero positivo. Implica que str1 aparece después de str2 en orden alfabético, como en un diccionario.
- Cuando el primer carácter que no coincide en str1 tiene un valor ASCII menor que el carácter correspondiente en str2, la función devuelve un número entero negativo. Implica que str1 aparece antes de str2 en orden alfabético, como en un diccionario.
Ejemplo 1
El siguiente ejemplo demuestra cómo se puede utilizar la función strcmp() en un programa en C:
#include <stdio.h>
#include <string.h>
int main(){
char *s1 = "BASK";
char *s2 = "BALL";
int ret = strcmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string \n");
else
printf("The first string appears before the second string \n");
return 0;
}
Ejecute el código y verifique su salida -
The first string appears after the second string
Cambie s1 a BACK y ejecute el código nuevamente. Ahora obtendrá el siguiente resultado:
The first string appears before the second string
Ejemplo 2
Puede obtener un resultado similar utilizando la función definida por el usuario str_cmp(), como se muestra en el siguiente código:
#include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main(){
char *s1 = "The Best C Programming Tutorial Available Online";
char *s2 = "The Best C Programming Tutorial Available Online";
int ret = str_cmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string\n");
else
printf("The first string appears before the second string\n");
return 0;
}
int str_cmp(char *str1, char *str2) {
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return *str1 - *str2;
}
str1++;
str2++;
}
// If both strings are equal, return 0
return 0;
}
Cuando ejecute este código, producirá el siguiente resultado:
Both strings are identical
La función str_cmp() compara los caracteres en el mismo índice en una cadena hasta que los caracteres de cualquiera de las cadenas se agotan o los caracteres son iguales.
Al momento de detectar caracteres desiguales en un mismo índice, se devuelve la diferencia en sus valores ASCII. Devuelve "0" cuando finaliza el bucle.
Lenguaje C
- Tutorial en C# PDF:Ejemplos para principiantes (Descargar ahora)
- C# - Directivas de preprocesador
- C# - Encapsulación
- Modificadores de acceso (especificadores) en C# con ejemplos de programas
- C Entrada Salida (E/S)
- Herencia C++
- Funciones C
- Tipos de bucles de C++
- C - Estructura del programa
- Declaración de interrupción de C#
- Variables de C# y tipos de datos (primitivos)