Comparar palabras en C

Iniciado por routers en C!, 3 Diciembre 2012, 21:09 PM

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

routers en C!

el problema es muy tonto y en C pero llevo toda la tarde.

Me piden un numero n y n palabras.
Tengo que utilizar un vector de tiras de caracteres.
El programa acaba diciéndome que palabra se repite mas.

Esto es lo que he echo:

#include<stdio.h>

#define N 100
int main (void){
    int n,i,j,k,max;
    int repe[N];
    char p[N][N];
    printf("Da un n:\n");
    scanf("%d",&n);

    for(i=0;i<N;i++){
        repe=0;
    }

    printf("Da las palabras:\n");
    for(i=0;i<n;i++){
        scanf("%s",p);
    }
    for(k=0;k<N;k++){
     for(i=1;i<n;i++){
        for(j=0;j<i;j++){
            if(p[k]==p[k][j]){
                repe[k]++;
            }
        }
      }
    }
    k=0;
    max=0;
    for(i=0; i<N; i++){
        if(max<repe){
            max=repe;
            k=i;
        }
    }

    if(k==0){
        printf("La  palabra que mas se repite es %s",p[0]);
    }else{
        printf("La  palabra que mas se repite es %s",p[k]);
    }
    return 0;
}

Xenomorfo77

Por favor ponlo un poco mas visible.

Código (cpp) [Seleccionar]

#include<stdio.h>

#define N 100
int main (void){
   int n,i,j,k,max;
   int repe[N];
   char p[N][N];
   printf("Da un n:\n");
   scanf("%d",&n);

   for(i=0;i<N;i++){
       repe[i]=0;
   }

   printf("Da las palabras:\n");
   for(i=0;i<n;i++){
       scanf("%s",p[i]);
   }
   for(k=0;k<N;k++){
    for(i=1;i<n;i++){
       for(j=0;j<i;j++){
           if(p[k][i]==p[k][j]){
               repe[k]++;
           }
       }
     }
   }
   k=0;
   max=0;
   for(i=0; i<N; i++){
       if(max<repe[i]){
           max=repe[i];
           k=i;
       }
   }

   if(k==0){
       printf("La  palabra que mas se repite es %s",p[0]);
   }else{
       printf("La  palabra que mas se repite es %s",p[k]);
   }
   return 0;
}

routers en C!

lo siento es la primer vez que lo hago,..
¿pero sabes como hacerlo?

Xenomorfo77

Cita de: routers en C! en  3 Diciembre 2012, 21:39 PM
lo siento es la primer vez que lo hago,..
¿pero sabes como hacerlo?

Me resulta casi inentendible tu codigo jaja. Tienes que leer n numero de cadenas y decir cual es la que mas se repite no? Puedes usar mas librerias? Hay una funcion que compara cadenas que se llama strcmp() de la libreria string, tambien puedes cojer los datos de las cadenas con fgets() busca información al respecto y postea tus dudas. Tratare de hacerte un code pero ahora mismo no tengo tiempo. Un saludo!

leosansan

#4
CitarCreo que ahora te funcionará:
Código (cpp) [Seleccionar]


#include<stdio.h>
#include <string.h>
#define N 100
int main (void){
   int n,i,j,k,max,repe[n];
   printf("Dame el numero de palabras: ");
   scanf("%d",&n);
   for(i=0;i<n;i++)
       repe[i]=0;
   char p[n][N];
   printf("Da las palabras:\n");
   for(i=0;i<n;i++)
       scanf("%s",p[i]);
   for(k=0;k<n;k++)
       for(i=0;i<n;i++)
           if (strcmp(p[k], p[i])==0 &&k!=i)
               repe[k]++;
   k=0;
   max=0;
   for(i=0; i<n; i++){
       if(max<repe[i]){
           max=repe[i];
           k=i;
       }
   }
   printf("La  palabra que mas se repite es %s",p[k]);
   return 0;
}

Saluditos!.

rir3760

Cita de: routers en C! en  3 Diciembre 2012, 21:09 PM
el problema es muy tonto y en C pero llevo toda la tarde.

Me piden un numero n y n palabras.
Tengo que utilizar un vector de tiras de caracteres.
El programa acaba diciéndome que palabra se repite mas.
Los pasos para realizar la operación, en lo general, son:

1) Almacenas cada palabra en un array de arrays de caracteres.
2) Ordenas las cadenas utilizando, por ejemplo, la función qsort parte de la biblioteca estándar de C (prototipo en <stdlib.h>).
3) Con el paso 2 los repetidos ya están agrupados, ahora solo debes comparar cada cadena con la anterior: si son distintas es un nuevo grupo, si son iguales incrementas el contador y comparas contra el máximo.

No es difícil, es eficiente y, mejor todavía, un buen ejercicio.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language