Page 125

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

2 Estructuras de datos en C: vectores est´aticos y registros

/* Descomposici´ on en un vector de palabras */ i = 0; while (i<lonfrase && !isalpha(frase[i])) i++; // Saltarse las no-letras iniciales.

23 24 25 26

palabras = 0; while (i<lonfrase) { // Recorrer todos los caracteres

27 28 29

// Avanzar mientras vemos caracteres e ir formando la palabra palabra[palabras]. j = 0; while (i<lonfrase && isalpha(frase[i])) palabra[palabras][j++] = frase[i++]; palabra[palabras][j] = ’\0’; // El terminador es responsabilidad nuestra.

30 31 32 33 34

// Incrementar el contador de palabras. palabras++; if (palabras == MAXPALSFRASE) // Y finalizar si ya no caben m´ as palabras break;

35 36 37 38 39

// Saltarse las no-letras que separan esta palabra de la siguiente (si las hay). while (i<lonfrase && !isalpha(frase[i])) i++;

40 41

}

42 43

/* Comprobaci´ on de posibles errores */ for (i=0; i<palabras; i++) printf ("%s\n", palabra[i]);

44 45 46 47

return 0;

48 49

}

¡Buf! Complicado, ¿no? ¡Ya estamos echando en falta el m´etodo split de Python! No nos viene mal probar si nuestro c´ odigo funciona mostrando las palabras que ha encontrado en la frase. Por eso hemos a˜ nadido las l´ıneas 44–46. Una vez hayas ejecutado el programa y comprobado que funciona correctamente hasta este punto, comenta el bucle que muestra las palabras: 44 45 46

/* Comprobaci´ on de posibles errores */ // for (i=0; i<palabras; i++) // printf ("%s\n", palabra[i]);

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · 132 Un programador, al copiar el programa, ha sustituido la l´ınea que reza as´ı: while (i<lonfrase && !isalpha(frase[i])) i++; // Saltarse las no-letras iniciales.

por esta otra: while (frase[i] != ’\0’ && !isalpha(frase[i])) i++; // Saltarse las no-letras iniciales.

¿Es correcto el programa resultante? ¿Por qu´e? · 133 Un programador, al copiar el programa, ha sustituido la l´ınea que reza as´ı: while (i<lonfrase && !isalpha(frase[i])) i++; // Saltarse las no-letras iniciales.

por esta otra: while (frase[i] && !isalpha(frase[i])) i++; // Saltarse las no-letras iniciales.

¿Es correcto el programa resultante? ¿Por qu´e? · 134 Un programador, al copiar el programa, ha sustituido la l´ınea que reza as´ı: while (i<lonfrase && isalpha(frase[i])) palabra[palabras][j++] = frase[i++];

por esta otra: while (isalpha(frase[i])) palabra[palabras][j++] = frase[i++];

¿Es correcto el programa resultante? ¿Por qu´e? Introducci´ on a la Programaci´ on con C

119

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement