Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con strings

Estas en el tema de Problemas con strings en el foro de C/C++ en Foros del Web. Resulta q nos pidieron hacer un programa q leyera n cantidad de cadenas de un archivo, ademas debe contar la cantidad de lineas y la ...
  #1 (permalink)  
Antiguo 14/06/2009, 16:21
 
Fecha de Ingreso: junio-2009
Mensajes: 4
Antigüedad: 14 años, 10 meses
Puntos: 0
Problemas con strings

Resulta q nos pidieron hacer un programa q leyera n cantidad de cadenas de un archivo, ademas debe contar la cantidad de lineas y la cantidad de palabras, pero debe tambien decir cuantas veces se repite una palabra en el texto, el codigo q coloco es lo q tengo hasta el momento, ya me lee la cantidad de palabras y la cantidad de lineas lo q no logro hacer es q me diga cuantas veces se repite una palabra en el texto, agradezco mucho la ayuda

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int contar_palabras(string);

int main (){

int lineas=0;
int palabras=0;
string x;
ifstream entrada;
ofstream salida;
entrada.open("arc_in");
salida.open("arc_out",ios::trunc);
if(!entrada){
cerr<<"El archivo no existe\n";
return 0;
}
while(getline(entrada,x)){
lineas++;
palabras+=contar_palabras(x);

}
salida<<lineas<<" lineas\n";
salida<<palabras<<" palabras\n";
entrada.close();
salida.close();
return 0;
}

int contar_palabras(string x){
int cant=0;
int pos;
if(x.size()==0)
return cant;
cant++;
pos=x.find_first_of(" ");
while(pos!=-1){
cant++;
if(x[pos+1]==' ')
while(x[pos+1]==' ')
pos++;
x=x.substr(pos+1,x.size()-(pos+1));
pos=x.find_first_of(" ");

cout<<x<<endl;
}
return cant;
}
  #2 (permalink)  
Antiguo 14/06/2009, 16:53
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Problemas con strings

Creo que lo que puedes hacer es ir metiendo todas las lineas en un array, y luego comparar caracter a caracter dentro del array, moviendote con dos bucles, cuando coincidan los caracteres mover ambos una posicion asi sucesivamente, en el momento en que no coincidan mueves el segundo bucle de la comparacion hasta que sea '\0', o hasta un determinado simbolo que pongas en el array, como un asterisco por ejemplo.

Código:
A B                       //B empieza en A+1
| |
M I  C A S A  E S  M A S  G R A N D E  Q U E  T U  C A S A*

--------------------------

A    B
|    |
M I  C A S A  E S  M A S  G R A N D E  Q U E  T U  C A S A*

---------------------------

     A                                             B        //A==B
     |                                             |
M I  C A S A  E S  M A S  G R A N D E  Q U E  T U  C A S A*

----------------------------

     A A2                                            B
     | |                                             |
M I  C A S A  E S  M A S  G R A N D E  Q U E  T U  C A S A*

--------------------------
Tendrias que usar un auxiliar para poder volver a contar si hay alguna otra palabra igual, en este caso CASA, y hará todo esto mientras que A sea distinto del asterisco, y cuando B llegue al final se inicializa de nuevo a una posicion siguiente a la de A.

Probablemente hay alguna manera mas sencilla, pero es la que se me ocurre en estos momentos

Comparando cadenas lo veo mas complicado aun, no se si esto es lo que buscas.

Suerte.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:47.