bucle con char

Iniciado por lukaszg_15, 1 Abril 2014, 20:02 PM

0 Miembros y 2 Visitantes están viendo este tema.

lukaszg_15

no me viene a la mente como hacer bien el ejercicio, solo me falta que todos sean 0 salvo el de caracteres indicados que se le deberia sumar 1 cada vez que haya una palabra de su dimension, lo tengo hecho de forma que lea los caracteres y me los lee bien pero no se me ocurre la forma correcta.

Código (cpp) [Seleccionar]
#include <iostream>


using namespace std;

int main(){
int n;
cout<<"Ingrese cantidad de nombre: ";
cin>>n;
cin.sync();

char nombres [n][25];

for(int k = 0;k<n;k++){
cout<<"Ingrese nombre "<<k+1<<": ";
gets(nombres[k]);
}
cout<<endl;



for(int k=0;k<n;k++)


cout<<"Palabra longitud "<< k+1 <<": "<< strlen(nombres[k]) <<endl;

system("pause");

return 0;

}

rir3760

Cita de: lukaszg_15 en  3 Abril 2014, 21:33 PMno me viene a la mente como hacer bien el ejercicio, solo me falta que todos sean 0 salvo el de caracteres indicados que se le deberia sumar 1 cada vez que haya una palabra de su dimension, lo tengo hecho de forma que lea los caracteres y me los lee bien pero no se me ocurre la forma correcta.
No deberías hacerlo así. Problemas hay varios como declarar el array "nombres" con un numero de elementos calculado en tiempo de ejecución (si es valido depende del compilador) y el uso de la función gets (no se recomienda, las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|).

En el programa lo que debes hacer es leer palabra por palabra hasta que la introducida sea "fin", por cada una actualizas la frecuencia correspondiente. Finalmente imprimes la frecuencia de cada palabra.

Puedes empezar con:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <string>
using std::string;

int main()
{
   unsigned long frec[26] = {0}; // Todos los elementos a cero
   
   string palabra;
   while (cin >> palabra && palabra != "fin"){
      // Actualizar la frecuencia de la palabra introducida,
      // su longitud esta dada por
      cout << "palabra.size() == " << palabra.size() << endl;
   }
   
   // Imprimir la frecuencia de cada palabra
   
   return 0;
}


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

lukaszg_15

eso mas o menos ya lo tenia, pero como coger esa longbitud y tranformarla en un 1?

es decir porque tengo que hacer un bucle si o si y entonces me sale todo 0 :

Código (cpp) [Seleccionar]
for (int i =0;i < 25;i++)
   
cout <<"Palabras longitud "<<i<<": " <<frec[25]<<endl;


entonces si yo escribo una palabra de 5 caracteres, para que Palabras longitud sea = 1 tendria que hacer otro bucle fuera de ese? porque si introduciese 2 palabras con 5 caracteres entonces tendria que ser Palabras longitud 5: 2.
Es que nunca he estudiado este tipo de estadisticas y cuando intento hacer algo con el i o con el frec me sale error, por ejemplo :

Código (cpp) [Seleccionar]
if (palabra.size() == 5) frec[4] == 1;

y me pone name lookup of 'i' changed for new ISO 'for' scoping
using obsolete binding at 'i'.

amchacon

Los dos códigos que han puesto tienen un error, error provocado por escribir muy rápido ;D

En el primer código pones frec[25], no sería frec?

En el segundo código pones == cuando supongo que querrias hacer =.

El error de compilación es porque estás usando la variable i fuera de su contexto (es decir, fuera del for).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar