aaah oks gracias naderST y x64Core ya solucione el problema y termine el programa
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
//dependiendo la opc del menu
switch(opc)
{
case 1:
ingresar();
system("cls");
break;
case 2:
busqueda();
getch();
break;
case 3: cout<<"El Numero de Repeticion que desea eliminar es: ";
cin>> v;
borrar();
break;
}
}while(opc!=4);
}
void borrar(Lista *lista, int v)
{
pNodo anterior, nodo;
nodo = *lista;
anterior = NULL;
while(nodo && nodo->valor < v)
{
anterior = nodo;
nodo = nodo->siguiente;
}
if(!nodo || nodo->valor != v) ;
else { /* Borrar el nodo */
if(!anterior) /* Primer elemento */
*lista = nodo->siguiente;
else /* un elemento cualquiera */
anterior->siguiente = nodo->siguiente;
free(nodo);
}
}
/*
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 el caracter siguiente es fin de cadena */
if(renglon[i+1]=='\0')
{
palabras[*total][j] = '\0'; /* Indica fin de palabra */
*total = *total+1; /* Aumenta el numero de palabras */
j=0;
}
}
/* 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])
{
char renglon[80];
char palabras[100][80]; /* Todas las 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 */
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--;
}
}
}
/* haya 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]++;
/* Muestra informacion */
printf("Palabras y numero de ocurrencias del archivo: %s\n\n", nombre_archivo);
printf("Total de palabras: %d\n", total);
printf("Palabras distintas: %d\n\n", diferentes);
for(i=0; i<diferentes; i++)
printf("%s -> %d\n", palabras_diferentes[i], Rep[i]);
}