palabras, palabras, palabras… tan sólo palabras (Lissette Alvarez)

// palabras.c, funciones manejan palabras

typedef struct {
int numPal; /* numero de palabras */
char pals[100][50]; /* palabras */
} PALS;

int numCar(char c[]) {
/* numero caracteres en frase */
int ln = 0; /* longitud */
char nul = ”; /* nulo */
while (c[ln++] != nul);
return –ln;
}

int numPal(char c[]) {
/* numero ‘palabras’ frase */
int np = 0; /* numero de palabras */
int p = 0; /* posicion en frase */
char nul = ”; /* nulo */
char esp = ‘ ‘; /* espacio en blanco */
int ant = 1, act; /* anterior, actual ( 1 = es espacio, 0 = no */
while (c[p] != nul) {
act = (c[p] == esp) ? 1 : 0;
if (ant && !act) np++;
ant = act;
p++;
}
return np;
}

void ignEsp(PALS *pals, char c[]) {
/* ignora espacios (y separa ‘palabras’ */
int p = 0; /* posicion en frase */
int nl; // numero de letras en palabra actual */
char nul = ”; /* nulo */
char esp = ‘ ‘; /* espacio en blanco */
pals->numPal = -1; /* numero de palabras */
int ant = 1, act; /* anterior, actual ( 1 = es espacio, 0 = no */
while (c[p] != nul) {
act = (c[p] == esp) ? 1 : 0;
if (ant && !act) {
pals->numPal++;
pals->pals[pals->numPal][0] = c[p];
nl = 1;
}
if (!ant && !act) pals->pals[pals->numPal][nl++] = c[p];
if (!ant && act) pals->pals[pals->numPal][nl] = nul;
ant = act;
p++;
}
pals->numPal++;
}

int siLet(char c) {
/* si c es una letra */
int sl = 0; /* si letra (1 = si, 0 = no) */
char lts[ ] = “aáAÁbBcCdDeéEÉfFgGhHiíIÍjJkKlLmMnNñÑoóOÓpPqQrRsStTuúüUÚÜvVwWxXyYzZ”;
int p = 0; /* posicion en lts */
char nul = ”; /* nulo */
int hll = 0; /* hallado */
while (!hll && lts[p] != nul) {
if (c == lts[p]) hll = 1;
p++;
}
return hll;
}

void sepPal(PALS *pals, char c[]) {
/* separa palabras (solo letras) */
int p = 0; /* posicion en frase */
int nl; // numero de letras en palabra actual */
char nul = ”; /* nulo */
pals->numPal = -1; /* numero de palabras */
int ant = 0, act; /* anterior, actual ( 1 = es letra, 0 = no */
while (c[p] != nul) {
act = siLet(c[p]);
if (!ant && act) {
pals->numPal++;
pals->pals[pals->numPal][0] = c[p];
nl = 1;
}
if (ant && act) pals->pals[pals->numPal][nl++] = c[p];
if (ant && !act) pals->pals[pals->numPal][nl] = nul;
ant = act;
p++;
}
pals->numPal++;
}

int main() {
PALS pl;
int p;
sepPal(&pl, ” ??intec, ***tu ***mejor decisión…”);
for (p = 0; p < pl.numPal; p++)
printf(“%s\n”, pl.pals[p]);
printf(“\n”);
system(“pause”);
return 0;
}

Reflexión: ¿Se podrían usar rutinas como éstas para crear interfases en modo de texto más ‘inteligentes’, digamos como oráculos que no impongan un esuqme visual tan cargado y estructurado? Se puede opinar sobre esto en cualquiera de las respectivas bitácoras.

ecabrera.

About these ads

Publicado el noviembre 28, 2007 en código. Añade a favoritos el enlace permanente. 1 Comentario.

  1. Mairelisa Batista

    Profesor pero usted habla de no sobrecargar el ambiente visual, sin embargo, a mi pensar eso nos facilitaría la comprensión de ese esquema. Ya que para mi una imagen vale más que 1000 palabras.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 25 seguidores

%d personas les gusta esto: