Anuncios Google

Programa Para contar palabras

ola gente un saludo pues en mi insti me estan dando duro con eso de programacion y me tope con un buen problema con un programa para contar palabras osea el problema pirincipal es la manera de contra palabra por espacios pero sin que estos se cuenten osea que no importa cuantos espacios tabuladores o saltos de carro el programa lea solo las palabras existentes

les dejo mi codigo para que medigan haber como puedo hacer esto

// practica 4 si.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "windows.h"
#include <iostream>
#include "stdlib.h"
#include "stdio.h"
#include "conio.h"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
char x, letra;
int cont=0, cont1=1, opcion;
	FILE *punt;
	do 
	{
	printf("Que opcion desea:\n 1.Contador de letras\n 2.contador de palabras\n 3.Salir\n");
	scanf("%i",&opcion);
	system("cls");
 
	switch(opcion)
	{ 
	case 1:
	punt=fopen("C:\\si.txt","r+");
	if(punt==NULL)
		cout<<"El archivo no se encuentra\n";
	else 
	    cout<<"Introduzca la letra a buscar\n"; 
	    cin>>letra;
	while(!feof(punt))
	{
		x=fgetc(punt);
		if(x==letra)
		{
			cont++;
		}
	}
	cout<<"Este texto contiene: "<<cont<<" letras "<<letra<<"\n";
		fclose(punt);
	system ("pause");
	system ("cls");
	break;
	case 2:
punt=fopen("C:\\si.txt","r+");
	if(punt==NULL)
		cout<<"El archivo no se encuentra\n";
	else 
	    cout<<"Espere...\n"; 
	while(!feof(punt))
	{
		x=fgetc(punt);
		if(x==' ')
		{
			cont1++;
		}
	}
	cout<<"Este texto contiene: "<<cont1<<" palabtras\n";
		fclose(punt);
	system ("pause");
	system ("cls");
break;
case 3:
	return 0;
	break;
 
	default:
		printf("Su opcion no es valida vuelaa intentarlo\n");
		printf("\n");
 
	};
	}
	while(opcion!=4);
 
	system("pause"); 
	return 0;
}

Gracias de antemano

 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

En C++ es mucho más simple que eso.

Ya has dado con una solución, así que probablemente te de igual, pero si usas fstream es muy sencillo contar palabras. Una propuesta de algoritmo, en unas 6 o 7 líneas de codigo:

do{
  string buff;
  fi >> buff;
  if (buff.length ()>0){
    count ++;
  }
}while (!fi.eof ());

Básicamente lee de palabra en palabra, e incrementa el contador por cada una. Se supone que ya has abierto un fichero en el objeto fi. Te pongo un código de ejemplo, que he hecho en 2 minutos deprisa y corriendo, solo para asegurarme de que funciona bien. El programa lee el nombre de fichero que le pasas como parámetro, cuenta las palabras y se lo dice al usuario:

#include <fstream>
#include <iostream>
#include <string>
 
using namespace std;
 
int main (int argc, char * argv []){
  ifstream fi;
  int count=0;
  fi.open (argv [1]);
  if (!fi){
    cout << "Error abriendo " << argv [1] << endl;
    return 1;
  }else{
    do{
      string buff;
      fi >> buff;
      if (buff.length ()>0){
	count ++;
      }
    }while (!fi.eof ());
  }
  cout << "Numero de palabras: " << count << endl;
  return 0;
}

Si lo necesitas, puedes adaptar el "algoritmo" a tu código, no te será difícil, aunque no creo que ya te sea muy útil.

Saludos!


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Lo tienes casi todo hecho

while(!feof(punt))
	{
		x=fgetc(punt);
		if(x==' ')
		{
			cont1++;
		}
	}

 

En este fragmento de código (contar palabras). Pon este bucle dentro:

 

while(!feof(punt))
	{
		x=fgetc(punt);
 
		if(x==' ')
		{
			cont1++;
 
                      while ( x == ' ')
                      {
                          x=fgetc(punt);
                      }
 
		}
	}

 

De esa forma, el programa saltará automáticamente a la siguiente palabra aunque haya 500 espacios en blanco de por medio.

Imagen de Jon_Nix

Gracias Bro!!!

Como quedo el code ya finalmente pero mas "pro"

while(!feof(punt))
	{
		x=fgetc(punt);
 
		if(x==32||x==9||x==10)
		{
			cont1++;
 
                      while (x==32||x==9||x==10)
                      {
                          x=fgetc(punt);
                      }
 
		}
	}
 

Imagen de Jon_Nix

Pero ahora salio otro problema....

Pero la cuestion es que cuando el archivo no tiene nada me cuenta 1 palabra

while(!feof(punt))
	{	
		x=fgetc(punt);
		if(x==32||x==9||x==10)
		{ 
			while(x==32||x==9||x==10)
            x=fgetc(punt);	
		}
		else
		{ 
			cont1++;
			while(x!=32||x!=9||x!=10)
            x=fgetc(punt);	
		}
 
	}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.