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

Problema con Strings

Estas en el tema de Problema con Strings en el foro de C/C++ en Foros del Web. Tengo un problema con un ejercicio, tengo que introducir una frase, y que esa frase de muestre alternativamente en mayúsculas y minúsculas. Estoy totalmente bloqueada, ...
  #1 (permalink)  
Antiguo 11/05/2010, 03:20
Avatar de tuka_85  
Fecha de Ingreso: febrero-2010
Ubicación: Santander/Huelva
Mensajes: 190
Antigüedad: 14 años, 2 meses
Puntos: 5
Problema con Strings

Tengo un problema con un ejercicio, tengo que introducir una frase, y que esa frase de muestre alternativamente en mayúsculas y minúsculas.

Estoy totalmente bloqueada, y lo que tengo es asi:

Código:
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <ctype.h>

main()
{
    
    char frase[50]="";
    char nuevaFrase;
    
    
    cout<<"\n\n\n\tIntroduce una frase (maximo 25 caracteres): \n\n\t\t";
    gets(frase);
    
    if(strlen(frase) >25)
    {
        frase[25]='\0';
        
    }
    
    
    cout<<"\n\n\n\tLa Frase introducida es: \n\n\t\t"<<frase;
    
    cout<<"\n\n\n\t\t\tTotal de caracteres: ";
    cout<<strlen(frase);
    
    
    for(int i=0;i<strlen(frase);i+2)
    {
        nuevaFrase += toupper(frase[i]);
        nuevaFrase += tolower(frase[i+1]);



    }
    
    cout<<"\n\n\n\tLa Frase alternada es: \n\n\t\t"<<nuevaFrase;
    
    getch();
}
  #2 (permalink)  
Antiguo 11/05/2010, 08:10
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Strings

Primero que el for nunca buclea: porque i+2 no significa nada....tienes que poner i=i+2; . Tiene que haber alguna asignacion.

Segundo estas sumando todo a nuevaFrase. Deberias hacer que nueva frase sea un arry:

char nuevaFrase[50] = "";

Como lo era el otro.

Y adentro del for haces:
nuevaFrase[i] = toupper(frase[i]);
nuevaFrase[i+1] = tolower(frase[i+1]);
  #3 (permalink)  
Antiguo 11/05/2010, 10:04
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problema con Strings

Ese codigo es "peligroso", avanza de 2 en 2 y concatena de 2 en 2 y no considera el caso de strings con largo impar.

Mejor seria hacerlo de a 1 caracter y tener logica para hacer toupper o tolower dependiendo si i es par o impar.
  #4 (permalink)  
Antiguo 11/05/2010, 11:32
Avatar de tuka_85  
Fecha de Ingreso: febrero-2010
Ubicación: Santander/Huelva
Mensajes: 190
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Problema con Strings

Cita:
Iniciado por sam90 Ver Mensaje
Primero que el for nunca buclea: porque i+2 no significa nada....tienes que poner i=i+2; . Tiene que haber alguna asignacion.

Segundo estas sumando todo a nuevaFrase. Deberias hacer que nueva frase sea un arry:

char nuevaFrase[50] = "";

Como lo era el otro.

Y adentro del for haces:
nuevaFrase[i] = toupper(frase[i]);
nuevaFrase[i+1] = tolower(frase[i+1]);

Lo he compilado y me da error en el for, he probado a poner i++ y sigue dandome error, que igual es un error dentro del for.
  #5 (permalink)  
Antiguo 11/05/2010, 14:50
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problema con Strings

Si quieres ayuda, seria bueno que pusieras el codigo que no compila y el error que se genera para ese programa. "Da error en el for" no es suficiente para descubrirlo, sin saber que fue lo que hiciste o que error es el que se genera.
  #6 (permalink)  
Antiguo 11/05/2010, 15:00
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Busqueda Respuesta: Problema con Strings

primero no es necesario utilizar el if en

if(strlen(frase) >25)
{
frase[25]='\0';

}
con solo poner frase[25] ='\0'; es mas k suficiente

en cuanto al for lo mejor es hacer lo de la siguiente forma(además como dicen en una de las respuestas el fraseNueva tambien deberia ser una cadena de caracteres).

int limite = strlen(frase);
for(int cont = 0; cont < limite; cont++)
{
fraseNueva[cont] = (cont%2 == 0)? upper(frase[cont]):lower(frase[cont]);
}

condicion?si condición es verdadera:si condición es falsa; es un operador condicional ternario, el unico que existe en C/C++. en cualquier libro de C/C++ podras encontrar mas información.

En cuanto a por que utilice una variable para almacernar la longitud de la cadena. es por que asi se evita llamar a la funcion en cada ciclo. es mera optimizacion

Etiquetas: strings
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 00:23.