Logo de Torre de Babel
Portada Libros Diseño web Artículos Glosario RSS
Buscar

Recorrer cadenas en C

A diferencia de otros lenguajes de programación, que almacenan la longitud de las cadenas de caracteres en la propia estructura que representa a la cadena, en C esa información no se conserva en parte alguna, de ahí que para obtenerla sea preciso recorrer carácter a carácter la cadena hasta encontrar un nulo o '\0', como hace la función strlen(). Es muy habitual escribir bucles del tipo:

int pos;
for(pos = 0; pos < strlen(cadena); pos++)
	haz_algo_con(cadena[pos]);

El inconveniente de esta técnica es que la cadena se recorre completa en cada ciclo del bucle, ya que cada llamada a strlen(), para obtener la posición límite hasta la que llegará pos, se traduce en otro bucle que enumera los caracteres desde el primero al último. Suponiendo que cadena contuviese 100 caracteres, el efecto sería equivalente a tener dos bucles anidados que, en total, ejecutarían 10000 ciclos sobre esa matriz de caracteres.

Para evitar esa reiteración innecesaria, mejorando el rendimiento del bucle de forma notable, hay varias posibilidades. Una de ellas consiste en invocar a strlen() antes de iniciar el bucle, conservando la longitud en una variable que se utilizará como referencia para saber cuándo se ha llegado al final. Más eficiente y simple aún, no obstante, es la codificación siguiente:

for(pos = 0; cadena[pos]; pos++)
	haz_algo_con(cadena[pos]);

En este caso la condición de fin del bucle es cadena[pos], que se evaluará como true siempre que no se haya llegado al final de la cadena, momento en que cadena[pos] == 0. El resultado final es el mismo: se enumeran todos los caracteres de la cadena, pero el tiempo de procesamiento será mucho menor.
Publicado el 5/7/2007



Curso de shaders

Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web