Unamonos los programadores de taringa y compartamos nuestros codigos, ya sea java, C, C++, php, jsp, html, css, python.... etc etc etc.. Enterate tambien de las innovaciones en el software y nuevas distribuciones de Microsoft, Linux y MacOS

Ver más
  • 1,702 Miembros
  • 560 Temas
  • 308 Seguidores
  • 0

[Ayuda]Como hacer que vaya leyendo caracteres

Hola,
Deberia de hacer un programa que uno escriba una oracion, frase o lo que sea, pero que termine en punto, luego te diga cual es la palabra mas larga.
Este es mi codigo:

#include <iostream>

using namespace std;

int main()
{
    char larg; //la palabra mas larga
    int n = 1;//numero de palabras de pal;
    char pal[n];//palabras que van siendo almacenadas en este vector
    for (char i; i != '.';i++)//mientras que n no sea . se hace
    {
        cin >> i;
        pal[n] = i;
        do
        {
            char vartemp = i;//sera la palabra evaluada
            while (vartemp != ' ')
            {
                if (larg < vartemp) larg = vartemp;
            }
        }
        while (i != '.');
    }
    cout << "La palabra mas larga es:" << larg << endl << "pal es" << pal[n] << endl;
    return 0;
}

Yo lo que quiero saber es como se hace para que los bucles vayan fijandose letra por letra, o palabra por palabra, osea que hagan tal cosa hasta que llegue el punto en el char, a ver si me ayudan.
Porque la verdad no tengo muy "fresco" esto.
Al compilar me pone para que introduzca la palabra y luego nada, se traba, y no se debuggear.
  • 0
  • 0Calificación
  • 0Seguidores
  • 72Visitas
  • 0Favoritos

4 respuestas

@GuybrushTreepwood dijo Hace más de 3 meses:

Se te traba porque esta instrucción prentende acceder a una posición inexistente del arreglo:

pal[n] = i;


Fijate que n lo inicializás con 1, por lo que tu arreglo pal tiene una sola posición, pal[0], y como n no cambia, estás intentando acceder a pal[1] que no existe.
La instrucción

if (larg < vartemp) larg = vartemp;

también te va a fallar ya que larg nunca fue inicializado.

Y el while de adentro loopea infinitamente, ya que vartemp nunca se modifica dentro del cuerpo del while.

De todas formas creo que te conviene leer strings enteros (una oración entera), en vez de caracter a caracter, y luego analizar la oración. O mejor aún, tokenizar por espacio en blanco (' '), y luego buscar la longitud mayor entre los tokens.

saludos

Tienes que ser miembro para responder en este tema