Programa capitalizador

Iniciado por yuna88, 21 Abril 2014, 16:16 PM

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

leosansan

#10
A ver si me logro explicar, ya que ni las imágenes parecen creibles.

Código (cpp) [Seleccionar]
if (frase[i]==' ')

es decir en la posición "i" hay un espacio. ¿Qué hago?.

Código (cpp) [Seleccionar]
frase[(i++) +1]=

cojo la posición "(i++)+1", es decir la posición "i+1" y "a continuación" (==> lo cual implica incremento de la "i)" hago:

Código (cpp) [Seleccionar]
=tolower(frase[i]);

donde la "i" que aparece debe haberse incrementado por el post-incremento previo y es ya la posición implícita "i+1".

Espero que haya quedado meridianamenteclara mi explicación.

Y para más claridad las imágenes que colgué en el mensaje anterior.

Y sí, las saqué del Code::Blocks 13.12 y ya me parecía excesivo colgar más.

Conclusión, a mi si me funciona así y a ti te funciona de la otra manera. :silbar:

Tampoco quiero hacer de este tema una controversia  sobre compiladores y demás. Sólo puse las imágenes para que quedará constancia que a mi si me funcionaba.





Blaster

#11
La verdad que es muy raro ahora que lo he analizado a fondo lo probe de esta manera
Código (cpp) [Seleccionar]
frase[++i] = toupper(frase[i]);
Que es conceptualmente igual a esto frase[(i++)+1] pero con la diferencia de que asi me da la salida correcta con el Code::Blosks

Saludos..

do-while

#12
¡Buenas!

Ya que te han dado soluciones, te dejo aquí otra. Simplemente para que veas que si lo único que tiene que hacer el programa es poner en mayúsculas la primera letra de cada palabra y el resto en minúsculas, no te hace falta ninguna cadena (otra cosa sería si tuvieses que utilizar una función...):

#include <stdio.h>
#include <ctype.h>

int main(int argc, char *argv[])
{
   int c,primera = 1;

   while((c = getchar()) != '\n')
   {
       if(isspace(c))
       {
           if(!primera)
               primera = 1;

           putchar(c);
       }
       else if(primera)
       {
           putchar(toupper(c));
           primera = 0;
       }
       else
           putchar(tolower(c));

   }

   return 0;
}


¡Saludos!

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Wop, todo eso suena a problemas en el orden de evaluación de los distintos compiladores (o igual incluso entre dos versiones distintas de un mismo compilador...). No se si el lenguaje define el orden de evaluación en estos casos o si depende del capricho del (de los) programador(es) del compilador...
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

1mpuls0

#13
Si se deja más de un espacio los programas las soluciones de leosansan y Blaster el programa falla.

En cambio el programa de do-while tiene en consideración ese detalle.

Aquí otra forma (incluyendo si se dejan varios espacios en blanco)
Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main() {

   string text = "i love this game ok?";
   int length = text.length();
   text[0] = toupper(text[0]);

   for(int index=1;index<length;index++) {
       if(text[index]!=' ') {
           continue;
       }

       if(text[index]=' ') {
           cout<<' ';
           index++;
           text[index]=toupper(text[index]);
       }
   }

   cout << "La frase capitalizada es: " << text << endl;

   return 0;
}
abc