// Fase 1: salta whitespace
while (str[i] == ' ' || str[i] == '\t' ...)
// Fase 2: signo
if (str[i] == '-') sign = -1;
// Fase 3: acumula dígitos
result = result * 10 + (str[i] - '0');
Números
ft_itoa — rellena de derecha a izquierda
Usa long para evitar overflow con INT_MIN. Calcula longitud → malloc → rellena.
// Rellena al revés:
str[--len] = '0' + (num % 10);
num /= 10;
// Usa long num = (long)n
Patrones
Detectar separadores (espacio / tab)
Patrón recurrente en first_word, last_word, epur_str, str_capitalizer...
// Separador básico:
c == ' ' || c == '\t'
// Saltar separadores iniciales:
while (str[i] == ' ' || str[i] == '\t')
i++;
Patrones
Flag de "nueva palabra"
Patrón para str_capitalizer, epur_str. El flag se activa tras separador.
new_word = 1; // inicio = nueva palabra
while (str[i])
{
if (is_sep(str[i])) new_word = 1;
else if (new_word) { /* capitalizar */ new_word = 0; }
else { /* minúscula */ }
}
Patrones
Subsecuencia — patrón dos índices
Usado en wdmatch, hidenp. i solo avanza cuando hay coincidencia.
i = 0; j = 0;
while (s1[i] && s2[j])
{
if (s1[i] == s2[j]) i++;
j++;
}
if (!s1[i]) // s1 está en s2
Bits
Operaciones de bits fundamentales
Para print_bits, reverse_bits, swap_bits, is_power_of_2.
(n >> i) & 1 // extrae bit en posición i
n & (n - 1) // 0 si potencia de 2
(n >> 4) | (n << 4) // swap nibbles
result = (result << 1) | (n & 1)
Recursión
Recursión — estructura básica
Caso base primero, luego la llamada recursiva. Usada en putnbr, pgcd, flood_fill.
int pgcd(int a, int b)
{
if (b == 0) return (a); // caso base
return (pgcd(b, a % b)); // recursión
}
Estructuras
Lista enlazada — recorrer
Avanza con ->next hasta NULL. Estructura: data + next.
while (list)
{
// usar list->data
list = list->next;
}
// al salir, list == NULL
Recursión
Flood Fill — lógica recursiva
Guarda target, marca como 'F', llama a los 4 vecinos si tienen target. tab[y][x].
target = tab[y][x];
if (target == 'F') return; // ya visitado
tab[y][x] = 'F';
// Comprobar límites antes de llamar:
// x > 0, x < size.x-1, y > 0, y < size.y-1
Algoritmos
Bubble Sort — ordenar array
Dos bucles anidados. El bucle interno puede reducirse en i cada iteración.
i = 0;
while (i < size - 1)
{
j = 0;
while (j < size - 1 - i)
{
if (tab[j] > tab[j+1])
swap(&tab[j], &tab[j+1]);
j++;
}
i++;
}
Strings
Espejo del alfabeto (alpha_mirror)
a↔z, b↔y. La posición desde el inicio = posición desde el final.
// Minúscula:
c = 'z' - (c - 'a');
// Mayúscula:
c = 'Z' - (c - 'A');
Norma
Norma — reglas básicas
Incumplir la Norma = 0. No opcional.
// ✓ Tabs para indentar (NO espacios)
// ✓ Max 25 líneas por función
// ✓ Max 4 parámetros por función
// ✓ Declarar variables al inicio del bloque
// ✓ Solo un return por función (recomendado)