Foros del Web » Programación para mayores de 30 ;) » C/C++ »

posicion de la cadena en archivo

Estas en el tema de posicion de la cadena en archivo en el foro de C/C++ en Foros del Web. saludos amigos... pido su ayuda para mi siguiente programa... en el siguiente estoy buscando la posicion de una cadena dentro del archivo por ejemplo-.... me ...
  #1 (permalink)  
Antiguo 09/09/2007, 17:04
 
Fecha de Ingreso: septiembre-2007
Mensajes: 5
Antigüedad: 17 años, 3 meses
Puntos: 0
posicion de la cadena en archivo

saludos amigos...
pido su ayuda para mi siguiente programa...
en el siguiente estoy buscando la posicion de una cadena dentro del archivo

por ejemplo-....

me amigo se llama juan

pedro es estuciante de ingenieria

la palabra amigo se encuentra en la coordenada (renglon 1, columna 4)y asi sucesivamente

entonces serian las coordenadas las que busco les agradesco de antemano su ayuda.. aqui les dejo mi codigo...

<code>
#include <stdio.h>
#include <string.h>
#include <conio.h>



char renglon[80];
char palabras[100][80]; /* Todos los palabras */
char palabras_diferentes[100][80]; /* Solo palabras diferentes */
int i, j, k, total=0 /* Numero total de palabras*/,
diferentes=0 /* Numero de palabras diferentes */;
int Rep[100]; /* Repeticiones de cada palabra diferente */


void separador(char *renglon, char palabras[100][80], int *total);
void ocurrencias(char *nombre_archivo);
void coordenadas();


int main()
{
char nombre_archivo[100] = "palabras.txt";


clrscr();

ocurrencias(nombre_archivo);
coordenadas();
getch();


return 0;
}



/*
Recibe una cadena y devuelve las palabras de dicha cadena.
Los espacios y saltos de linea son los separadores entre palabras.
*/
void separador(char renglon[80], char palabras[100][80], int *total)
{
int i, j=0;


for(i=0; i<strlen(renglon); i++)
{
/* Si es un caracter distinto de espacio y salto de linea */
if(renglon[i]!=' ' && renglon[i]!='\n')
{
palabras[*total][j] = renglon[i];
j++;
}
/* Si es espacio o salto de linea */
else if(renglon[i]==' ' || renglon[i]=='\n')
{
/* Si el caracter anterior no es espacio ni salto de linea */
if(i>0 && renglon[i-1]!=' ' && renglon[i-1]!='\n')
{
palabras[*total][j] = '\0'; /* Indica fin de palabra */
*total = *total+1; /* Aumenta el numero de palabras */
j=0;
}
}
}
}



void ocurrencias(char nombre_archivo[100]
{

FILE *archivo;


archivo=fopen(nombre_archivo,"r" ;


if(archivo==NULL)
{
printf("No se encuentra archivo: %s\n", nombre_archivo);
return ;
}
/* Lee el archivo linea a linea y obtiene las palabras de esa linea */

while(fgets(renglon,80,archivo))
{

separador(renglon,palabras, &total);
}


fclose(archivo);


/* Saca copia del arreglo original */
for(i=0; i<total; i++)
strcpy(palabras_diferentes[i], palabras[i] ;


/* Saca palabras diferentes */
diferentes = total;
for(i=0;i<diferentes;i++)
{
for(j=i+1;j<diferentes;j++)
{
/* Si encuentra palabra repetida */
if(!strcmp(palabras_diferentes[i], palabras_diferentes[j] )
{
/* Recorre una posicion elementos posteriores */
for(k=j+1;k<diferentes;k++)
strcpy(palabras_diferentes[k-1], palabras_diferentes[k] ;


diferentes--;
j--;
}
}
}


/* Halla repeticiones de cada palabra distinta */
for(i=0; i<diferentes; i++)
Rep[i] = 0;
for(i=0; i<diferentes; i++)
for(j=0;j<total;j++)
if(!strcmp(palabras_diferentes[i], palabras[j] )
Rep[i]++;


gotoxy(10,5);printf("PALABRA\t\tREPETICIONES\t\tCO ORDENADAS" ;
int y=7;
for(i=0; i<diferentes; i++)
{
gotoxy(11,y);printf("%s", palabras_diferentes[i] ;
gotoxy(31,y);printf("%d",Rep[i] ;

y=y+1;
}
}

</code>
  #2 (permalink)  
Antiguo 11/09/2007, 09:12
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: posicion de la cadena en archivo

Cita:
Iniciado por pak-man Ver Mensaje
saludos amigos...
pido su ayuda para mi siguiente programa...
en el siguiente estoy buscando la posicion de una cadena dentro del archivo

por ejemplo-....

me amigo se llama juan

pedro es estuciante de ingenieria

la palabra amigo se encuentra en la coordenada (renglon 1, columna 4)y asi sucesivamente

entonces serian las coordenadas las que busco les agradesco de antemano su ayuda.. aqui les dejo mi codigo...

<code>
#include <stdio.h>
#include <string.h>
#include <conio.h>



char renglon[80];
char palabras[100][80]; /* Todos los palabras */
char palabras_diferentes[100][80]; /* Solo palabras diferentes */
int i, j, k, total=0 /* Numero total de palabras*/,
diferentes=0 /* Numero de palabras diferentes */;
int Rep[100]; /* Repeticiones de cada palabra diferente */


void separador(char *renglon, char palabras[100][80], int *total);
void ocurrencias(char *nombre_archivo);
void coordenadas();


int main()
{
char nombre_archivo[100] = "palabras.txt";


clrscr();

ocurrencias(nombre_archivo);
coordenadas();
getch();


return 0;
}



/*
Recibe una cadena y devuelve las palabras de dicha cadena.
Los espacios y saltos de linea son los separadores entre palabras.
*/
void separador(char renglon[80], char palabras[100][80], int *total)
{
int i, j=0;


for(i=0; i<strlen(renglon); i++)
{
/* Si es un caracter distinto de espacio y salto de linea */
if(renglon[i]!=' ' && renglon[i]!='\n')
{
palabras[*total][j] = renglon[i];
j++;
}
/* Si es espacio o salto de linea */
else if(renglon[i]==' ' || renglon[i]=='\n')
{
/* Si el caracter anterior no es espacio ni salto de linea */
if(i>0 && renglon[i-1]!=' ' && renglon[i-1]!='\n')
{
palabras[*total][j] = '\0'; /* Indica fin de palabra */
*total = *total+1; /* Aumenta el numero de palabras */
j=0;
}
}
}
}



void ocurrencias(char nombre_archivo[100]
{

FILE *archivo;


archivo=fopen(nombre_archivo,"r" ;


if(archivo==NULL)
{
printf("No se encuentra archivo: %s\n", nombre_archivo);
return ;
}
/* Lee el archivo linea a linea y obtiene las palabras de esa linea */

while(fgets(renglon,80,archivo))
{

separador(renglon,palabras, &total);
}


fclose(archivo);


/* Saca copia del arreglo original */
for(i=0; i<total; i++)
strcpy(palabras_diferentes[i], palabras[i] ;


/* Saca palabras diferentes */
diferentes = total;
for(i=0;i<diferentes;i++)
{
for(j=i+1;j<diferentes;j++)
{
/* Si encuentra palabra repetida */
if(!strcmp(palabras_diferentes[i], palabras_diferentes[j] )
{
/* Recorre una posicion elementos posteriores */
for(k=j+1;k<diferentes;k++)
strcpy(palabras_diferentes[k-1], palabras_diferentes[k] ;


diferentes--;
j--;
}
}
}


/* Halla repeticiones de cada palabra distinta */
for(i=0; i<diferentes; i++)
Rep[i] = 0;
for(i=0; i<diferentes; i++)
for(j=0;j<total;j++)
if(!strcmp(palabras_diferentes[i], palabras[j] )
Rep[i]++;


gotoxy(10,5);printf("PALABRA\t\tREPETICIONES\t\tCO ORDENADAS" ;
int y=7;
for(i=0; i<diferentes; i++)
{
gotoxy(11,y);printf("%s", palabras_diferentes[i] ;
gotoxy(31,y);printf("%d",Rep[i] ;

y=y+1;
}
}

</code>
De entrada, te recomiendo que dejes de usar conio.h.Quieres saber porque? ve las FAQs o muchos de los posts de este foro donde tienen problemas con conio.h.

Despues.

Yo lo que haria seria ir leyendo linea por linea entera.
Despues en esa linea usando strcmp ir checando una coincidencia caracter por caracter, es decir, con un puntero.

int *p=linea;
strncmp("amigo", p, strlen("amigo"));
p++;

Y asi sucesivamente.
Aparte tienes que llevar otro contador que es el que te va a llevar la coordenada x.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:28.