Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: samantika en 3 Septiembre 2015, 00:53 am



Título: Arreglos y Cadenas de caracteres AYUDA
Publicado por: samantika en 3 Septiembre 2015, 00:53 am
Hola necesito hacer un programa que me cuente las veces que se repite una palabra en un texto leido desde un fichero, lo que se me ocurre es ir guardando cada palabra en un espacio de un arreglo bidimensional, pero como hago esto? he intentado mil manera y no doy, les proporciono mi codigo, espero me puedan ayudar, saludos.


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

char lectura[1000],lectura2[1000][50],espacios[100],c;
int longi,i;

main()
{
FILE *enlace = fopen("archivo.txt", "r");
if(enlace==NULL)
{
perror("El archivo no se abrio!";
}
fscanf(enlace, " %[^n]", &lectura);
printf("%s", lectura);
fclose(enlace);

int palabras=1, cont=0;
while(cont<strlen(lectura))
{

if(c=getc(enlace)!=' ')

palabras++;
cont++;

}
printf("nnCantidad de caracteres %d", cont);
printf("nnCantidad de palabras %dn", palabras);

getch();
}


Título: Re: Arreglos y Cadenas de caracteres AYUDA
Publicado por: RockPosts en 4 Septiembre 2015, 20:27 pm
¿Lo que quieres es saber cuántas veces se repite UNA palabra, o cuántas veces se repite cada palabra del archivo?

En el caso de que sea la primera opción, aquí te dejo un ejemplo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main () {
  6. char lpszText[] = "Esto es el texto que incluye el archivo. Esto no son datos reales Jaja";
  7. char lpszWordToBeChecked[256] = ""; // Contendrá la palabra a ser comparada
  8. char *lpszWord; // Contendrá las palabras leidas (solo una por ciclo)
  9. unsigned int uRepeatedTimes = 0; // Numero de veces que se ha repetido la palabra
  10. unsigned int nCounter = 0; // Contador usados en los ciclos 'for'
  11.  
  12. printf("Introduzca la palabra que desea que comparemos: ");
  13. scanf("%s", lpszWordToBeChecked);
  14.  
  15. for(nCounter = 0; lpszWordToBeChecked[nCounter] != 0; nCounter++) { // Convertimos la palabra a ser comparada a minusculas para así poder comparar las cadenas
  16. if(lpszWordToBeChecked[nCounter] >= 65 && lpszWordToBeChecked[nCounter] <= 90)
  17. lpszWordToBeChecked[nCounter] += 32;
  18. }
  19.  
  20. lpszWord = strtok(lpszText, " ,:.;-_123456789<>(){}/\\\""); // Tomamos una palabra de la cadena. El segundo parámetro contiene los caracteres que no forman una palabra
  21.  
  22. while(lpszWord != 0) {
  23. for(nCounter = 0; lpszWord[nCounter] != 0; nCounter++) { // A minusculas (para poder comparar las cadenas)
  24. if(lpszWord[nCounter] >= 65 && lpszWord[nCounter] <= 90)
  25. lpszWord[nCounter] += 32;
  26. }
  27.  
  28. if(strcmp(lpszWord, lpszWordToBeChecked) == 0) // Comparamos la cadena
  29. uRepeatedTimes++;
  30.  
  31. lpszWord = strtok(NULL, " ,:.;-_123456789<>(){}/\\\""); // Tomamos la siguiente palabra de la cadena
  32. }
  33.  
  34. printf("Las veces que se ha repetido la palabra '%s' son: %u", lpszWordToBeChecked, uRepeatedTimes); // Imprimimos el resultado final!
  35.  
  36. return 0;
  37. }

PD.: USA LAS ETIQUETAS GeSHI!!


Título: Re: Arreglos y Cadenas de caracteres AYUDA
Publicado por: d91 en 5 Septiembre 2015, 04:28 am
¿El fichero a leer es cualquiera al azar? o ¿El fichero fue escrito con una estructura?
de la primera forma, se necesita crear una funcion que lea los caracteres y los vaya agrupando y guardando en un arreglo, y despues comparar
Código
  1. if(isalpha());
  2. ///***///
  3. if(strcmpy(cadena1,cadena2)) cont++;
ahora para la segunda forma seria tal vez con un doble fread(); comparando lo que va leyendo