Hacernos nuestro propio comando cat.
¿que es lo que hace cat?: unir archivos y te muestra el resultado en
la salida estandard. Queremos que nos enseñe el contenido del
archivo.
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
// Tarea: crear un comando nos muestre
el contenido de un archivo
int c=1;
// repetir tantas veces como nº de
argumentos-1 haya (para ver mas de un archivo)
char caracter;
FILE *pf;
while (c<argc){
// leo el argumento (nº2,n=1,
para leer el archivo que queremos que nos muestre
// abrir el archivo
if
((pf=fopen(argv[c],"r"))==NULL){
printf("no exise el archivo:
%s",argv[c]);
//break;
} else {
// empiezo a leerlo hasta que
termine
while(!feof(pf)){
// leer cada linea con fscanf
// mostrar contenido con
prinf
fscanf(pf,"%c",&caracter);
printf("%c", caracter);
}
// cerrar el archivo
fclose(pf); // cierrro el
archivo
}
c++;
}
printf("***************** Fin del
programa ************ \n");
return 0;
}
2º problema:
Hacer un programa que admita dos
argumentos: el 1º una palabra a buscar y el 2º un nombre de
archivo. La respuesta del programa debe de ser la cantidad de veces
que aparezca la palabra en el archivo.
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#define FALSE 0
#define TRUE !FALSE
int busca(char *, char *); // palabra y fichero
int main(int argc, char **argv)
{
// Tarea: buscar cuantas veces se repite una palabra en un archivo
int c=0;
char caracter;
char textofichero[23000];
FILE *pf;
// leo el argumento (el argumento 0 es la nombre del programa)
// leo el argumento (el argumento 1 es la palabra a buscar)
// leo el argumento (el argumento 2 es el nombre del archivo)
// abrir el archivo
if ((pf=fopen(argv[2],"r"))==NULL){
printf("no exise el archivo: %s",argv[2]);
//break;
} else {
// empiezo a leerlo hasta que termine
c=0;
while(!feof(pf)){
fscanf(pf,"%c",&caracter);
textofichero[c]=caracter;
c++;
}
textofichero[c]='\0';
printf("%s",textofichero);
// cerrar el archivo
fclose(pf); // cierrro el archivo
// buscar la palabra que esta el el argumento nº 1, en el texto
printf("Numero de veces que se repite: %d \n", busca(argv[1],textofichero));
}
printf("***************** Fin del programa ************ \n");
return 0;
}
//funcion de busqueda de una palabra en un texto largo:
int busca(char *palabra1,char *textoarchivo)
{
int tamP1;
int tamP2;
int c2 = 0;
int posicion = 0;
int despla = 0;
int encontrado = FALSE;
int veces; // numero de veces que encuentra la palabra
veces=0;
// Comprobaciones previas
tamP1 = strlen(palabra1);
tamP2 = strlen(textoarchivo);
// Si palabra1 es más larga que palabra2, es imposible que esté contenida en palabra2
if(strlen(palabra1) > strlen(textoarchivo)) {
return 0;
}
// Mientras en palabra2 queden suficientes letras para que pueda contener palabra1
// Busca la primera letra de palabra 1 en palabra 2
for(c2 = 0; c2 <= tamP2 -tamP1 && !encontrado; c2++) {
// Coincide la primera letra de palabra1
if(palabra1[0] == textoarchivo[c2]) {
// Busca el resto de las letras de palabra 1 a partir de donde se encontró la primera en palabra2
for(despla = 0; palabra1[despla] == textoarchivo[c2 + despla] && palabra1[despla] != '\0'; despla++) {
}
// Si despla llega a tamP1 indica que se a recorrido palabra1 por completo y coincide
if(despla == tamP1) {
posicion = c2;
encontrado = TRUE;
}
}
if(encontrado) {
printf("%d\n", posicion); // Muestro la posicion donde esta
veces++; //Voy contando cuantas veces pararece
encontrado=FALSE;
}
}
return veces;
}
No hay comentarios:
Publicar un comentario