Dev - C++ - Identificar si la cadena a buscar esta a la izquierda o a la derecha

 
Vista:
sin imagen de perfil

Identificar si la cadena a buscar esta a la izquierda o a la derecha

Publicado por Hernan (1 intervención) el 02/05/2017 21:03:52
Buenas tardes.

Tengo ya éste código que busca una cadena de texto dentro de la entrada inicial.
Este programa me indica si la cadena de texto existe, en que posición y el número de veces que se encontró.
Sin embargo necesito saber si el texto buscado está a la derecha o a la izquierda.

Por ejemplo:

Entrada: AMDUF558HGGU
Texto bucado: DU
Se encontró: SI
Posición:3
Izquierda o Derecha: Izquierda (esta parte me falta)

Aquí dejo mi código esperando su ayuda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<iostream>
#include<string.h>
#include <stdlib.h>
#define MAXT 1000
#define MAXP 1000
 
using namespace std;
char        Entrada[MAXT] ;
char        Secuencia[MAXP] ;
signed int  rep  ;
signed int  comp ;
 
void busqueda(char *b, int a, int cadena[])
{
    int i;
    for (i = 0; i < 256; ++i)
        cadena[i] = a;
 
    for (i = 0; i < a - 1; ++i)
    {
        cadena[b[i]] = a - i - 1;
    }
}
 
void compara( char *d, int e , char *f, int g)
{
    int  j , busqueda1[256] ;
    char c ;
    busqueda(f, g, busqueda1) ;
    j = 0;
    while (j <= e - g)
    {
        c = d[j + g - 1] ;
        if ( f[g - 1] == c && memcmp(f, d + j, g - 1) == 0 )
        {
             cout<<endl<<"Posición en la que se localiza : "<< j + 1 << endl;
             rep ++ ;
        }
        j = j + busqueda1[c] ;     comp ++ ;
    }
}
 
int main()
{
    cout<<endl<<"Teclea Entrada : " ;
    gets( Entrada ) ;
 
    cout<<endl<<"Teclea la Secuencia a buscar : " ;
    gets( Secuencia ) ;
 
    int in  = strlen( Entrada ) ;
    int sec = strlen( Secuencia ) ;
 
    compara( Entrada , in , Secuencia , sec ) ;
    if(rep  == 0)
        cout<<endl<<"ERROR - Esa cadena de caracteres NO existe " ;
    else
        cout<<endl<<"Numero de veces que aparece la secuencia : "<< rep ;
 
    cout<<endl<<endl<<"Comparaciones : "<< comp ;
    cout<<endl;
    cout<<endl;
 
    system("pause");
 
    return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Identificar si la cadena a buscar esta a la izquierda o a la derecha

Publicado por agustin (522 intervenciones) el 03/05/2017 13:55:59
Supongo que tomas cómo referencia el centro de la cadena.
Obtén el largo de la cadena y divides entre 2 en un float, comparas ese valor con la posición donde se encontró la cadena + el largo de la cadena a buscar dividida por dos. Si es mayor esta a la derecha y si es menor esta a la izquierda y si dan el mismo valor es porque esta justo en el centro. Es importante usar float o double ya que si no podria darse el caso de que al ser par el largo y dividir entre 2 se trunca el resultado y daría valores erróneos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Identificar si la cadena a buscar esta a la izquierda o a la derecha

Publicado por agustin (522 intervenciones) el 04/05/2017 15:22:07
Te pongo un pequeño codigo en C que te indica si la cadena buscada esta a izquierda o derecha o en el centro:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <string.h>
 
int main ()
{
	char frase[100]="hola mundo cruel";
	char cadena[100];
	float centro_frase, centro_cadena;
	int largo_frase;
	int largo_cadena;
	unsigned long pos;
	printf ("Introduce la cadena a buscar: ");
	fgets (cadena,100,stdin);
 
	largo_frase=strlen (frase);
	largo_cadena=strlen (cadena);
	if (largo_cadena > 1){
		cadena [--largo_cadena]='\0';
		pos=strstr (frase, cadena);
		if (pos != NULL){
			pos-=(unsigned long)frase;
			centro_cadena=largo_cadena/2.0+pos;
			centro_frase=largo_frase/2.0;
			if (centro_cadena < centro_frase){
				printf ("la cadena esta a la izquierda de la frase\n");
			}else if (centro_cadena > centro_frase){
				printf ("la cadena esta a la derecha\n");
			}else {
				printf ("la cadena coincide en el centro\n");
			}
		}else {
			printf ("No se encuentra la cadena en la frase\n");
		}
	}else {
		printf ("La cadena introducida esta vacia\n");
	}
	return 0;
}
En C uso fgets y me obliga a reajustar la cadena y su largo pero en C++ no te haría falta.
Podrías crear una función recursiva la cual te de todas las ocurrencias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar