Un algoritmo mas para este blog, espero que a alguien le sea de utilidad.
Todo empezo cuando nuestro maestro de “Teoria de la computacion” dejo como “tarea” hacer un algoritmo que fuese capas de identificar palabras reservedas del lenguaje c en archivos de texto plano, codificarlo y generar el ejecutable que hiciera el mencionado trabajo.
Usando la funcion read(), la cual lee un flujo de bytes, hace que este programa encuentre las palabras reservadas en cualquier secuencia de bytes que cumplan con el patron de alguna palabra reservada de el lenguaje C.
Como se podran dar cuenta haciendo unas pequeñas modificaciones, podremos encontrar cualquier secuencia de bytes que se especifique.
Bueno hay se los dejo, si hay algun comentario al respecto, solo comentalo, espero que sea constructivo.:)
/************************************************************
*
* ALUMNO: Fredy Ramirez Guzman
* MATERIA: Teoria de la computacion
* PROGRAMA: busc.c -> Encuentra palabras reservadas del
* -> lenguaje c en un archivo.
*
************************************************************/
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
main(int argc, char *argv[]){
<ul>char pal[37][10]={"auto", "break", "case", "char",
"const", "continue", "default", "do",
"double", "else", "enum", "extern",
"float", "for", "goto", "if",
"int", "long", "register", "return",
"short", "signed", "sizeof", "static",
"struct", "switch", "typedef", "union",
"unsigned", "void", "volatile", "while",
"include"};
char arr[15]={0};
char buffer[2]={0};
int df, x, i,contador=0;
df = open(argv[1], O_RDONLY);
if(df==-1){</ul>
printf("\nNo se encontro el archivo: %s\n", argv[1]);
}
else{
printf("\n\n -- Archivo: %s --\n", argv[1]);
printf(" -- Palabras reservadas que contiene --\n\n");
while((x = read(df, buffer, 1))!=0){
if(buffer[0]=='a' || buffer[0]=='b' || buffer[0]=='c' ||
buffer[0]=='d' || buffer[0]=='e' || buffer[0]=='f' ||
buffer[0]=='g' || buffer[0]=='h' || buffer[0]=='i' ||
buffer[0]=='k' || buffer[0]=='l' || buffer[0]=='m' ||
buffer[0]=='n' || buffer[0]=='o' || buffer[0]=='p' ||
buffer[0]=='r' || buffer[0]=='s' || buffer[0]=='t' ||
buffer[0]=='u' || buffer[0]=='v' || buffer[0]=='w' ||
buffer[0]=='x' || buffer[0]=='y' || buffer[0]=='z' ){
strcat(arr, buffer);
}
else{
if(strlen(arr)>=2 && strlen(arr)<=8){
for(i=0; i<37; i++){
if(strcmp(arr, pal[i])==0){
printf(" %s\n", arr);
contador++;
}
}
}
arr[0]='';//entre las comillas simples coloca el caracter de
}/*"fin de cadena" (diagonal invertida seguida de un cero) por alguna razon wordpress lo elimina.*/
}//De lo contrario el programa no funcionara...
printf("\n %d palabras reservadas escritas en el archivo.\n\n",
contador);
}
}//fin de programa busc.c
Por cierto, este programa lo llame “busc.c“; para compilarlo y ejecutarlo:
$ gcc busc.c -o busc
$ ./busc [nombre_de_archivo].[extencion]
Saludos…
Entradas de interes:






Una pregunta, en tu caso cuál es el caracter para fin de cadena, estaba haciendo algo similar pero no se si poner salto de línea o espacio o que onda. Muchas gracias.
Listo jeje, muchas gracias de cualquier manera, buen tutorial gracias…
Ya esta corregido el problema de las librerias.