Arreglos y Cadenas de caracteres AYUDA

Iniciado por samantika, 3 Septiembre 2015, 00:53 AM

0 Miembros y 1 Visitante están viendo este tema.

samantika

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();
}

RockPosts

¿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 (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main () {
char lpszText[] = "Esto es el texto que incluye el archivo. Esto no son datos reales Jaja";
char lpszWordToBeChecked[256] = ""; // Contendrá la palabra a ser comparada
char *lpszWord; // Contendrá las palabras leidas (solo una por ciclo)
unsigned int uRepeatedTimes = 0; // Numero de veces que se ha repetido la palabra
unsigned int nCounter = 0; // Contador usados en los ciclos 'for'

printf("Introduzca la palabra que desea que comparemos: ");
scanf("%s", lpszWordToBeChecked);

for(nCounter = 0; lpszWordToBeChecked[nCounter] != 0; nCounter++) { // Convertimos la palabra a ser comparada a minusculas para así poder comparar las cadenas
if(lpszWordToBeChecked[nCounter] >= 65 && lpszWordToBeChecked[nCounter] <= 90)
lpszWordToBeChecked[nCounter] += 32;
}

lpszWord = strtok(lpszText, " ,:.;-_123456789<>(){}/\\\""); // Tomamos una palabra de la cadena. El segundo parámetro contiene los caracteres que no forman una palabra

while(lpszWord != 0) {
for(nCounter = 0; lpszWord[nCounter] != 0; nCounter++) { // A minusculas (para poder comparar las cadenas)
if(lpszWord[nCounter] >= 65 && lpszWord[nCounter] <= 90)
lpszWord[nCounter] += 32;
}

if(strcmp(lpszWord, lpszWordToBeChecked) == 0) // Comparamos la cadena
uRepeatedTimes++;

lpszWord = strtok(NULL, " ,:.;-_123456789<>(){}/\\\""); // Tomamos la siguiente palabra de la cadena
}

printf("Las veces que se ha repetido la palabra '%s' son: %u", lpszWordToBeChecked, uRepeatedTimes); // Imprimimos el resultado final!

return 0;
}


PD.: USA LAS ETIQUETAS GeSHI!!

d91

¿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 (cpp) [Seleccionar]

if(isalpha());
///***///
if(strcmpy(cadena1,cadena2)) cont++;

ahora para la segunda forma seria tal vez con un doble fread(); comparando lo que va leyendo