Blog
Definición de strings o cadenas
Las strings, (o cadenas, es español); en el lenguaje C son en realidad matrices de caracteres. Aunque los punteros en C están en un tema avanzado explicado más adelante, utilizaremos punteros a un conjunto de caracteres en esta lección; para definir cadenas simples, de la siguiente manera:
char * nombre = "John Smith";
Este método te crea una string o cadena que solo se puede ser usada para leer los datos que esta contiene. Si deseamos definir una cadena que pueda ser manipulada, necesitaremos definirla como una matriz de caracteres local:
char nombre[] = "John Smith";
Esta notación es diferente porque asigna una variable de matriz para que podamos manipularla. La notación de corchetes vacíos le dice al compilador que calcule el tamaño de la matriz automáticamente. De hecho, esto es lo mismo que asignarlo explícitamente, agregando uno a la longitud de la cadena:[]
char nombre[] = "John Smith"; /* es lo mismo que */ char nombre[11] = "John Smith";
La razón por la que nosotros necesitamos añadir uno mas, aunque la cadena de caracteres, John Smith tiene exactamente 10 caracteres de longitud, es para la terminación de la cadena; la cual debe terminar con un caracter especial (igual a 0) que indica el final de la cadena o string. El final de la cadena está marcado porque el programa no conoce la longitud de la cadena como tal. Esta información sólo puede conocerla el compilador, el cual reconoce la misma según el código.
Formato de cadena con printf
Es posible utilizar el comando printf para formatear una cadena junto con otras cadenas, te muestro un ejemplo de la siguiente manera:
#include <stdio.h> int main() { char * nombre = "John Smith"; int edad = 27; /* imprimir 'John Smith tiene 27 años cumpliidos.' */ printf("%s tiene %d años cumplidos.\n", name, age); return 0; }
Ten en cuenta que al imprimir cadenas en pantalla, debes agregar un carácter de nueva línea, el cual se escribe así: ( \n) para que nuestra próxima declaración printf sea impresa en una nueva línea.
Longitud de la cadena
Para conocer la longitud de una cadena contamos con la función ‘strlen’, la cual nos devuelve la longitud de la cadena que debe pasar como un argumento:
#include <stdio.h> int main() { char * nombre = "Nikhil"; printf("%d\n",strlen(nombre)); return 0; }
Comparación de cadenas
La función strncmp nos compara dos cadenas, devolviendo el número 0, si es que las cadenas son iguales en longitud; o nos devuelve un número diferente si estas cadenas tienen un largo distinto. Los argumentos son las dos cadenas que tenemos para comparar, y la longitud máxima de comparación entre ellas. En lenguaje C, también podemos encontrar la existencia de una versión poco segura de esta función strcmp; sin embargo, no es recomendable su uso. Por ejemplo:
#include <stdio.h> int main() { char * nombre = "John"; if (strncmp(nombre, "John", 4) == 0) { printf("Hola, John!\n"); } else { printf("Tu no eres Jhon, vete.\n"); } return 0; }
Concatenación de cadenas
La función‘ strncat’ nos agrega los primeros n caracteres de la cadena src string a la cadena que tenemos como destino; donde n es el mínimo (n, longitud (src)); los argumentos pasados son la cadena de destino, la cadena fuente y n – número máximo de caracteres a añadir:
#include <stdio.h> int main() { char dest[20]="Hola"; char src[20]="Mundo"; strncat(dest,src,3); printf("%s\n",dest); strncat(dest,src,20); printf("%s\n",dest); return 0; }
Ejercicio
En este ejercicio debes definir la cadena primer_nombre con el valor John usando la notación del puntero y definir la cadena apellido con el valor ¡Hecho! usando la notación del arreglo local.
#include <stdio.h> #include <string.h> int main () { *definir primer_nombre */ define apellido */ char nombre[100]; apellido[0] =' B'; sprintf (nombre,"%s %s %s", primer_nombre, apellido); if (strncmp (nombre,"John Boe", 100) == 0) {) {) printf ("¡Hecho! \n"); } nombre[0]='\0'; strncat (nombre, primer_nombre, 4); strncat (nombre, apellido, 20); printf ("%s\n", nombre); return 0; }
Solución
#include <stdio.h> #include <string.h> int main() { char primer_nombre[] = "John"; char apellido[] = "Doe"; char nombre[100]; apellido[0] = 'B'; sprintf(nombre, "%s %s", primer_nombre, apellido); if (strncmp(nombre, "John Boe", 100) == 0) { printf("¡Hecho!\n"); } nombre[0]='\0'; strncat(nombre,primer_nombre,4); strncat(nombre,apellido,20); printf("%s\n",nombre); return 0; }
Salida en pantalla
¡Hecho! JohnBoe
Si has llegado hasta aquí enhorabuena ? pasa a la siguiente lección:
➡Bucle for (AprenderC curso principiante)
[…] ➡Strings o cadenas (AprenderC curso principiante) […]