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
[Ayuda]Como hacer que vaya leyendo caracteres
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.
- 0Calificación
- 0Seguidores
- 72Visitas
- 0Favoritos
Global
Argentina
Chile
Colombia
España
México
Perú
Uruguay
Venezuela
4 respuestas
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
No esta este un poco mejor?
#include <iostream>
//Contador de letras creado por Symt4x1z el 22/2/2012
using namespace std;
int main()
{
cout << "Ingresa una frase menor de 50 letras" << endl;
int max = 50, tot, major;
char palabra[max];
char pal;
cin >> pal;
palabra[max] = pal;
for (int def = 0; def != '.';def++)
{
if (palabra[def] == ' ') def++;
while (palabra[def] != ' ')
{
tot += def;
}
if (tot > major) major = tot;
tot = 0;
}
cout << "La palabra mas larga es" << major << endl;
return 0;
}
Parece que mi problema es como dijiste que hay un bucle infinito, pero, yo queria saber si hay algun codigo que al apretar la letra lo registre sin apretar enter como pasa en 'cin'. Ya que haci haria una cadena con mas facilidad. ya que hirias agregando letra por letra hasta que sea '.' y se acaba, pero como hago esto, otra libreria como stdio.h no podria funcionar?
Porque de esta manera creo que si hare 'strings' como dices ya que hiria almacenando caracter por caracter, incrementando el valor de max, y asi luego hacer las comparaciones y eso lo vere luego, pero... Como podria hacer esto, de apretar una tecla y que ya se registre su valor? O eso tampoco funcionario?
Pille otra cosita, en mi codigo anterior yo tenia que ingresar el valor de pal, palabra
llevava su valor, en cada
se supondria que debia estar cada uno de sus caracteres no?
Y me mostraba asi:
Ingrese las letras
(yo puse)hola como estas.
(y como puse cout >> palabra, me mostro solo h) h
Justo ahora que parecia que le estaba pillando y que iba a salirme me dio un error de compilacion, en la linea 'while (pal[cont] != ' ', el debugger marca que es en esa linea y no se porque es el error ni como solucionarlo. Codigo completo:
#include <iostream>
using namespace std;
int main()
{
cout << "Ingresa una frase!" << endl;
int cont = 0;
char pal[50];
cin >> pal;
char ultra;
do
{
char temp;
while (pal[cont] != ' ')
{
temp += pal[cont];
cont++;
}
if (temp > ultra) ultra = temp;
temp = 0;
cont++;
}
while (pal[cont] != '.');
cout << "La palabra mas larga es:" << ultra << endl;
}