/
Inicio :: Foros

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

Imprimir una porcion de la cadena al inverso!

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



Registrado: 12 Nov 2007
Mensajes: 5
Ubicación: Caguas, Puerto Rico

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 15/11/2007 7:12 pm
Título:

Muchisimas gracias!! Me sirvio de mucha ayuda!

Exito!
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