Problema con contador de palabra en C

Iniciado por Blaster, 30 Mayo 2013, 21:09 PM

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

Blaster

Alguien me puede echar una mano con este codigo que no me compila me tira este error:

Código (asm) [Seleccionar]
error: lvalue required as increment operand

Y aqui esta el codigo que llevo:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
   char frase[] = "Hola como estas Hola como te va Hola amigo";
   char palabra[] = {"Hola"};

   int lon = strlen(palabra);

   int i, j = 0;

   while(*frase != '\0'){
       i = 0;
       while(*frase != ' ' || *frase != '\0'){
           frase++; // Error en esta linea
           i++;
       }
       if(strncmp(frase - lon, palabra, lon)==0) j++;

       if(*frase != '\0')
           frase++; // Y aqui
   }

   printf("La palabra Hola se repite %d veces", j);

   return 0;
}



Saludos  :rolleyes:

amchacon

No lo puedo probar pero intenta cambiar los corchetes por un *:

char frase[] = "Hola como estas Hola como te va Hola amigo";

char* frase = "Hola como estas Hola como te va Hola amigo";
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Blaster

amchacon he probado la forma que me indicaste me lanza uno peor de igual forma
estoy buscado por la red informacion al respecto

Saludos

Blaster

#3
Hola he intentado hacerlo de esta forma pero sigue sin funcionar este me compila
pero al ejecutarlo me indica que mi programa quiere leer una area de memoria que
no esta disponible como puedo correjirlo

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char frase[] = "Hola como estas Hola como te va Hola amigo";
   char palabra[] = { "Hola" }, auxiliar[10]={0};

   int lon = strlen(palabra);

   int i, j = 0;

   do{

       while(frase[i] != '32')
       {
           auxiliar[i] = frase[i];
           i++;
       }
       auxiliar[i]='\0';
       if(i == lon && strcmp(auxiliar, palabra) == 0)
         j++;

         if(frase[i] != '\0')
           i++;

   }while(frase[i] != '\0');

   printf("La palabra Hola se repite %d veces", j);

   return 0;
}



Saludos  

leosansan


Pues a mí si me compila, pero con unas pequeñas variaciones :)

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char frase[] = "Hola como estas Hola como te va Hola amigo";
    char palabra[] =  "Hola" , aux[10]={0},aux0[10]="";
    int i=0, j = 0;

    do
    {
        if(frase[i]=='H' && frase[i+3]=='a')
            j++;
        i++;
    }while(frase[i] != '\0');
    printf("La palabra %s se repite %d veces con do-while\n" , palabra, j);

    /************ otra forma************/

   char *p;
    i=0;
    for (p = frase; (p = strstr(p, "Hola")) != NULL; p += 2)
        i++;
    printf("La palabra %s se repite %d veces con strstr.\n",palabra, j);

    /************ otra forma************/

    int k=0;
    i=0, j = 0;
    for (i=0;frase[i] != '\0' ;i++)
    {
        if (frase[i] != ' ')
            aux[k] = frase[i];
        k++;
        if (frase[i] == ' ')
        {
            aux[k-1]='\0';
            k=0;
            if (strcmp (palabra,aux)==0)
                j++;
            strcpy(aux,aux0);
        }
    }
     printf("La palabra %s se repite %d veces con strcmp", palabra,j);
    return 0;
}


Saluditos!. .... ..

Blaster

leosansan me podrias indicar los errores que hay en el ultimo codigo que postee
ya no lo puedo ver te lo agradeceria mucho excelente los codigos que posteaste

Saludos  :rolleyes:

xiruko

Prueba con:

char frase[] = "Hola como estas Hola como te va Hola amigo";
char *p = frase;


Y haz con 'p' todo lo que hacías con 'frase'.

Saludos.

leosansan

Cita de: mcKicrO en 31 Mayo 2013, 02:56 AM

   int i, j = 0;
Código (cpp) [Seleccionar]

   do{

       while(frase[i]!= '32')
       {
          ......................................................................


Perdona que no haya mirado mucho el código, pero de entrada tienes un despiste mortal de necesidad, no has inicializado la variable i y a partir de ahí paré de mirar, sorry. Cuando pille más tiempo lo miraré más detalladamente.

Saluditos! ... ..

xiruko

Cita de: leosansan en 31 Mayo 2013, 23:14 PM
Perdona que no haya mirado mucho el código, pero de entrada tienes un despiste mortal de necesidad, no has inicializado la variable i y a partir de ahí paré de mirar, sorry. Cuando pille más tiempo lo miraré más detalladamente.

De hecho en esta misma línea que comentas:

Citarwhile(frase!= '32')

O bien pones esto:
while(frase[i]!= 32)

O bien pones esto:
while(frase[i]!= ' ')

Saludos!

daryo

#9
bue ya que postee mire tu code

frase++; no es la forma correcta de recorrer los arrays esto puede funcionar con una variable numerica pero no con una cadena.

supongo que intentas moverse un caracter pero lo que haces es en caso de ser variable numerica sumarle uno

para recorrer un array es asi

char cadena[2];

for (int num=0;num<2;num++)
{
cadena[num];
}
buenas