Autor Tema: Cadena de caracteres. (Mayúscula)

0 Usuarios y 1 Visitante están viendo este tema.

18 Abril, 2012, 02:51 pm
Leído 2704 veces

Meghan

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 8
  • Karma: +0/-0
  • Sexo: Femenino
Hola,

Estoy haciendo un programa que  lea una frase cualquiera y que la transforma de la siguiente forma : Todas las letras deberán transformarse en minúsculas salvo aquellas que sean el comienzo de una palabra, que deberán transformarse en mayúsculas. Y no puedo usar la biblioteca cctype.

Yo he hecho tres funciones void :
 -AvanzarSeparadores
-CambiarMayusculas
-CambiarMinusculas

El problema lo tengo en el programa principal, a ver si me sacáis la dudilla:

   int main()
   {
        int i=0;
        char cadena[100];
        cout<< " Introduzca una frase :" << endl;
        cin.getline(cadena,100);
       
        while(cadena!='\0')
        {
              AvanzarSeparadores(cadena,i);
              CambiarMayusculas(cadena,i);
              CambiarMinusculas(cadena,i);
        }
        cout<<cadena<< endl;

}


Compila, pero no me sale nada.


Gracias  =)

19 Abril, 2012, 04:23 am
Respuesta #1

Phicar

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 513
  • Karma: +1/-0
  • Sexo: Masculino
    • redinfocol.org
Hola, ni idea que estes haciendo en AvanzarSeparadores, etc etc etc...Pero seguro que haces algo ahi dentro ya que estas comparando cadena con '\0' osea cadena vacia. Luego debes estar quitandole caracteres a cadena, por eso no te sale nada.

Para el ejercicio te recomiendo usar apuntadores.. Iteras sobre el apuntador de la cadena. Verificas si es mayuscula o minuscula y haces lo que te piden. Seguro te sera mas facil con apuntadores que quitandole cosas a la cadena.

La otra opcion es que no le estes quitando nada a cadena(muy posible porque no le esas pasando un apuntador ni puedes cambiar estaticamente esa variable) luego te estas quedando infinitamente en el ciclo.Solucion:

while(cadena!='\0')
        {
              AvanzarSeparadores(cadena,i);
              CambiarMayusculas(cadena,i);
              CambiarMinusculas(cadena,i);
              i++;
        }

Cualquier cosa dices.
        cout<<cadena<< endl;
redinfocol.org

19 Abril, 2012, 08:22 pm
Respuesta #2

Meghan

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 8
  • Karma: +0/-0
  • Sexo: Femenino
Hola Phicar, los apuntadores todavía no los he dado.. :(. Te escribo todo lo que he hecho, seguro que he puesto alguna burrada .

#include <iostream>
using namespace std;

 bool EsMayuscula(char let)
 {
    return(let>='A' && let<='z');
 }

 bool EsMinuscula(char let)
 {
    return(let>='a' && let <='z');
 }

 bool EsLetra(char let)
 {
    return (EsMayuscula(let));
    return(EsMinuscula(let));
}

void AvanzarSeparadores(const char cad[],int& pos)
{
    while(pos<100 && !EsLetra(cad[pos]))
    pos++;
}


void CambiarMayusculas(const char cad[], int& pos)
{
    char let;

    for(pos=0;cad[pos]<2;pos++)
    {
        if(EsMinuscula(let)&& EsLetra(let))
        {
            let=let-32;

        }
     cout<< let;
    }
  }

void CambiarMinusculas(const char cad[],int& pos)
{
    char let;

    for(pos=2;cad[pos]==EsLetra(let);pos++)
    {
        if (EsMinuscula(let))
        {
           let=let+32;

        }
     cout<<let;
    }

}


int main()
{
    int i=0;

    char cadena[100];
    cout<< " Introduzca una frase :"<<endl;
    cin.getline(cadena,100);

    while (cadena!='\0'){
          AvanzarSeparadores(cadena, i);
          CambiarMinusculas(cadena,i);
          CambiarMinusculas(cadena,i);
          i++;



    }

    cout<<cadena<<endl;


}