/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda con tolower y toupper

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dementor3



Registrado: 14 Nov 2007
Mensajes: 1

MensajePublicado: 14/11/2007 5:43 am
Título: Ayuda con tolower y toupper

hola Tengo un pequeño problema


tengo que hacer 3 trabajos dos de los cuales ya estan listos, solo me falta el segundo que dice asi


tengo que imprimir en pantalla una cadena usando toupper y tolower, pero con la siguiente caracteristica

la primera letra en mayuscula, la segunda en miniscula, y asi suscesivamente, hay que usar punteros, habia pensado hacerlo en un ciclo while , pero cuando compilo salen puros caracteres.

Gracias






Este es el primer programa que hice, este programa muestra la cadena ingresada en mayusculas y luego al lado de esta muestra la cadena invertida y en minuscula, el programa esta listo si no fuera por un detalle cuando invierte la segunda cadena sale con un caracter extraño y no se como quitarlo

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

void main()
{
int i;
char cad1[30], cad2[30], *p;
clrscr();
printf("ingrese Texto:");
gets(cad1);
p=cad1;
while(*p)
{
printf("%c", toupper(*p++)); /*convierte en mayuscula el apuntador*/
}
for(i=strlen(cad1)-1; i>=-1; i--) /*ciclo que invierte la cadena*/
{
printf("%c", (*p--));
}
strcat(cad1, cad2); /* copia concatena cadena 2 en la cadena 1*/
{
printf("%c", cad1);
getche();
}
printf("\n");
printf("\n");
printf("\n");
printf("Software Developed By\n");
printf("Carlos Ferrada C");
getche();
}
_________________
The Hitman
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 314
Ubicación: Cono Sur

MensajePublicado: 14/11/2007 6:31 am
Título:

El error está en la cadena de control de una de las salidas:
Código:
printf("%c", cad1);

Lo correcto sería así:
Código:
printf("%s", cad1);

Y antes de eso, la concatenación tienes que hacerla al revés:
Código:
strcat(cad2, cad1);


En C estándar:
Código:

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

int main(void)
{
    int i;
    char cad1[30], cad2[30], *p;
    printf("ingrese Texto:");
    gets(cad1);
    p=cad1;
    while(*p)
        printf("%c", toupper(*p++)); /*convierte en mayuscula el apuntador*/
    for(i=strlen(cad1)-1; i>=-1; i--) /*ciclo que invierte la cadena*/
        printf("%c", (*p--));
    strcat(cad2, cad1); /* copia concatena cadena 2 en la cadena 1*/
    printf("%s", cad1);
    puts("\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}


Un saludo
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 314
Ubicación: Cono Sur

MensajePublicado: 14/11/2007 7:01 am
Título:

Código:

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

int main(void)
{
    int i;
    char cad1[30], *p;
    printf("ingrese Texto: ");
    gets(cad1);
    p=cad1;
    while(*p)
        printf("%c", toupper(*p++)); /*convierte en mayuscula el apuntador*/
    for(i=strlen(cad1)-1; i>=-1; i--) /*ciclo que invierte la cadena*/
        printf("%c", (*p--));
    puts("\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}


Un saludo
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 314
Ubicación: Cono Sur

MensajePublicado: 14/11/2007 7:18 am
Título:

Código:

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

int main(void)
{
    int b=0;
    char cad1[30], *p;
    printf("ingrese Texto: ");
    gets(cad1);
    p=cad1;
    while(*p)
        if(b%2==0)
        {
            printf("%c", toupper(*p++)); /*convierte en mayuscula el apuntador*/
            b++;
        }
        else
        {
            printf("%c", *p++);
            b++;
        }
    puts("\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}


Un saludo
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3770
Ubicación: Mexico

MensajePublicado: 14/11/2007 8:00 am
Título:

Nota de edicion: todo esto en referencia solo al primer mensaje de este tema.

El programa que muestras imprime un caracter de mas porque el rango de caracteres que procesas es "strlen(cad1)-1 ... -1" cuando deberia ser "strlen(cad1)-1 ... 0". Aparte de eso el programa tiene deficiencias como el uso de conio, la defincion de la funcion main, etc.

El programa modificado como C estandar (sin, para empezar, conio) y corregido es:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(void)
{
   char cadena[30];
   char *p;
   
   puts("Ingrese el texto:");
   if (fgets(cadena, 30, stdin) == NULL)
      return EXIT_FAILURE;
   
   puts("Texto original (mayusculas):");
   for (p = cadena; *p != '\0'; p++)
      putchar(toupper(*p));
   putchar('\n');
   
   puts("Texto invertido (minusculas):");
   while (p-- > cadena)
      putchar(tolower(*p));
   putchar('\n');

   return EXIT_SUCCESS;
}


Y para imprimir una cadena alternando los caracteres en minusculas y mayusculas solo tienes que realizar un bucle donde los caracteres con indice par los imprimes en minusculas y los de indice impar en mayusculas.

Para obtener el indice puedes utilizar la expresion:
Código:
p - base

Donde "base" es la direccion base de la cadena a imprimir y "p" es un puntero que en cada iteracion procesa un caracter de esa cadena. El bucle seria mas o menos asi:
Código:
puts("Texto alternando minusculas y mayusculas:");
for (p = cadena; *p != '\0'; p++)
   if ((p - cadena) % 2 == 0)
      putchar(tolower(*p));
   else
      putchar(toupper(*p));
putchar('\n');


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com