8.3.09

La libreria de cadenas cd C (I)

Cuando aprendí a programar siempre me pedian que escribiera funciones de prueba que, compararan cadenas, copiaran cadenas etc. y siempre me pregunté como lo harian los que de verdad sabian o mejor dicho como lo harian las librerias del sistema.

Ultimamente me he estado pegando con plan9 y he visto el codigo de varias funciones de cadenas del sistema, asi que ahi va una explicación rapida.

strchr: devuelve un puntero a la primera posicion de ch si este está en s1, o NULL si no está.

char*
strchr(char *s, int c)
{
char c0 = c;
char c1;

if(c == 0){
while(*s++)
;
return s-1;
}

while(c1 = *s++)
if(c1 == c0)
return s-1;
return 0;
}
Lo primero es que si el carácter que estamos buscando es el carácter 0, esto es NULL (en C se pone un NULL al final de cada cadena) entonces lo único que hacemos es avanzar el puntero de la cadena hasta encontrar ese NULL.

Como se usa un post incremento s++, hay que devolver s-1 ya que s era NULL y además le hemos avanzado una posición mas.

En caso contrario se va avanzando el puntero de la cadena y a la vez asignándoselo a una variable que se compara con el carácter pedido, si aun así no se ha encontrado se devuelve NULL (0).

Éste código ha salido de plan9

No hay comentarios: