| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
dementor3
Registrado: 14 Nov 2007 Mensajes: 1
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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:
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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |