| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
hezelmet
Registrado: 12 Nov 2007 Mensajes: 5 Ubicación: Caguas, Puerto Rico
| Publicado: 12/11/2007 11:37 pm | | | Título: Imprimir una porcion de la cadena al inverso! |
| Tengo que hacer un programa que me lea dos cadenas (A y B) e imprima si B esta o no contenida en A. De estar contenida, el programa debe imprimir:
1. En que posicion de A comienza B. (Primera ocurrencia) 2. Donde termina B en A. (ocurrencia final) 3. La cadena A en orden inverso a excepcion de la porcion correspondiente a la cadena B. 4. La porcion correspondiente a la cadena B debe imprimirse alternando mayuscula y minuscula.
Ejemplo: A="Pepe esta jugando afuera" B="jugando"
Resultado del algoritmo: B esta contenida en A: comienza en 11 y termina en 17. Imprime: "areufa JuGaNdO atse epeP"
EL PUNTO ES EL SIGUIENTE... TENGO TODO HECHO!!! PERO NO SE COMO HACER PARA QUE ME IMPRIMA JUSTO LA PORCION QUE COINCIDE ENTRE LA ORACION ESCRITA AL INVERSO...
ESTO ES LO QUE TENGO:
#include <iostream> #include <stdio.h> #include <string.h> #define max 50
using std::cout; using std::endl;
int main() { char cadenaA[max], cadenaB[max], *pos, inversa[max]; int sizeA, sizeB, sizeP, posini, posfinal, i=0, j=0, x;
cout<<"Ingresar cadena A: "; gets(cadenaA);
cout<<"Ingresar cadena B: "; gets(cadenaB);
if(strstr(cadenaA, cadenaB)!=0) { pos=strstr(cadenaA, cadenaB);
sizeA= strlen(cadenaA); sizeB= strlen(cadenaB); sizeP= strlen(pos); posini= sizeA-sizeP+1; posfinal=posini+sizeB-1;
cout<<endl<<"La cadena B esta contenida en A."<<endl; cout<<"La coincidencia comienza en "<<posini<<" y termina en "<<posfinal<<endl;
cout<<"Resultado del algoritmo:\n"<<endl; while (cadenaB[i]!='\0') { if (j==0) printf("%c", toupper(cadenaB[i])); else printf("%c", tolower(cadenaB[i])); j=1-j; i++; }
for(x=0;x<strlen(cadenaA);x++) { sizeA=sizeA-1; inversa[x]=cadenaA[sizeA]; } inversa[strlen(cadenaA)]='\0'; cout<<endl<<inversa<<endl;
} else { cout<<"La cadena B no esta contenida en A"<<endl; }
return 0; }
SEGUN EL EJEMPLO QUE LES DI, EL PROGRAMA ME IMPRIME:
JuGaNdO areufa odnaguj atse epeP
CUANDO DEBERIA IMPRIMIR:
areufa JuGaNdO atse epeP
ALGUIEN TIENE ALGUNA IDEA??? GRACIAS!!! |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3770 Ubicación: Mexico
| Publicado: 13/11/2007 6:16 am | | | Título: |
| Para imprimir una cadena al reves solo tienes que procesar todos sus elementos en orden inverso empezando por el ultimo y terminando con el primero.
Un programa de ejemplo muy sencillo es, en C estandar:
| Código: | #include <stdio.h> #include <stdlib.h>
int main(void) { char cadena[] = "Esta es solo una cadena de prueba"; size_t i; /* Obtener la longitud de la cadena */ for (i = 0; cadena[i] != '\0'; i++) ; /* Imprimir sus caracteres en orden inverso */ while (i-- > 0) putchar(cadena[i]); putchar('\n'); return EXIT_SUCCESS; } |
En tu caso el proceso es identico si la subcadena no forma parte de la cadena pero si esta (la subcadena) si forma parte de la cadena el proceso se debe dividir en tres partes.
Para explicarlo mejor supongamos que la cadena es "Esta es la cadena de prueba" y la subcadena a buscar es "cadena", utilizando este ejemplo:
Siempre en orden inverso se debe imprimir:
1) Los caracteres posteriores a la subcadena, en este caso " de prueba". 2) La subcadena con los caracteres alternando entre mayusuculas y minusculas. 3) Los caracteres anteriores a la subcadena, en este caso "Esta es la "
Eso se puede implementar de varias formas utilizando ya sea condicionales y bucles (if + for) o solo bucles for (ajustando el valor de ciertas variables).
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 | |  | hezelmet
Registrado: 12 Nov 2007 Mensajes: 5 Ubicación: Caguas, Puerto Rico
| Publicado: 15/11/2007 7:12 pm | | | Título: |
| Muchisimas gracias!! Me sirvio de mucha ayuda!
Exito! |
| | 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
|
|
| |