En el lenguaje C no existe un tipo de dato específico para cadenas de caracteres. Las cadenas de caracteres se representan como vectores de caracteres. Cada elemento del vector es un carácter de la ristra. Tras el último carácter de la ristra debe haber un carácter especial que marca el final de ésta, este carácter es el nulo, ASCII 0, también representado en C como '\0'.
El lenguaje no suministra un conjunto de operaciones sobre ristras. Para realizar operaciones elaboradas sobre ristras como calcular su longitud, concatenar dos ristras, etc., es necesario emplear funciones de la biblioteca.
Los literales de ristras se escriben como una secuencia de caracteres encerrados entre comillas dobles ("). El programador no debe modificar el contenido de un literal ristra. Estos literales representan direcciones del tipo "char *" a una zona de memoria denominada memoria global donde el compilador almacena el literal en cuestión. La característica anterior no se cumple cuando el literal inicializa un vector de caracteres en su definición.
Los literales ristra son vectores de caracteres que se almacenan en una zona especial de la memoria, su longitud está determinada por la presencia de un carácter marcador de final de ristra. Cuando se usan en el código, representan un puntero al inicio del vector correspondiente. Un literal carácter es un elemento muy distinto, se parece a un literal numérico ya que no se almacena en ningún sitio especial y cuando se usa en el código queda incrustado en éste. Para distinguir ambos literales se usa una notación distinta para representarlos. Se usan las comillas dobles, ", para delimitar una ristra y se usan las comillas simples, ', para delimitar un carácter.
La función frecuenciaCaracter calcula la frecuencia del carácter pasado como segundo parámetro en la ristra pasada como primer parámetro.
#include <stdio.h> #include <string.h> int frecuenciaCaracter(char *r, char c){ int i, frec=0, tam=strlen(r); /* Se invoca a la función strlen para calcular la longitud de la ristra */ for(i=0;i<tam;i++) if(r[i]==c) frec++; return frec; } int main(){ char car, *s; /* Se define un puntero a caracteres */ char nombre[7]="Felipe"; /* En este caso el literal no representa un char * */ s="Obra literaria"; /* Ahora s apunta a una zona de memoria donde se almacena la ristra */ car='e'; printf("La frecuencia de %c en %s es %i\n", car, nombre, frecuenciaCaracter(nombre,car)); car='a'; printf("La frecuencia de %c en %s es %i\n", car, s, frecuenciaCaracter(s,car)); return 0; }