void Reemplaza(int inicio, int n_a_quitar, SecuenciaCaracteres a_insertar) {
        int diferencia_componentes, tamanio_a_insertar, lectura, escritura, siguiente;

        tamanio_a_insertar = a_insertar.TotalUtilizados();

        if(tamanio_a_insertar + total_utilizados <= TAMANIO && n_a_quitar <= total_utilizados - inicio && inicio <= total_utilizados) {

            diferencia_componentes = tamanio_a_insertar - n_a_quitar;

            if(diferencia_componentes < 0) {
                siguiente = 1;
                lectura = inicio + n_a_quitar;
                escritura = inicio + tamanio_a_insertar;
            }
            else {
                siguiente = -1;
                lectura = total_utilizados - 1;
                escritura = total_utilizados - 1 + diferencia_componentes;
            }

            int numero_componentes_a_desplazar = total_utilizados - n_a_quitar - inicio;

            for(int i=0; i < numero_componentes_a_desplazar; i++) {
                vector_privado[escritura] = vector_privado[lectura];
                lectura = lectura + siguiente;
                escritura = escritura + siguiente;
            }

            for(int i=0; i<tamanio_a_insertar; i++) {
                vector_privado[inicio+i] = a_insertar.Elemento(i);
            }
        }
        total_utilizados = total_utilizados + diferencia_componentes;
    }
Пример #2
0
int main(){

	char caracter, letra_inicio, letra_final;
	int contador; 
	SecuenciaCaracteres letras;

	cout << "\nintroduce una secuencia de caracteres (# para terminar): \n";
	
	while(caracter != '#'){

		caracter = cin.get();
		cin.ignore();

		if (caracter != '#'){


			letras.Aniade(caracter);

		}
	
	}

	//imprimimos el vector original

	cout << "\n\nDatos del vector original" << "\n";

	for(contador = 0; contador < letras.TotalUtilizados(); contador++){

		cout << letras.Elemento(contador) << "\n";

	}

	cout << "\n\nIntroduce la letra de inicio para imprimir el vector: ";
	cin >> letra_inicio;
	cout << "\n\nIntroduce la letra por la que finalizará el vector: ";
	cin >> letra_final;

	SecuenciaCaracteres resultado(letras.Ordena(letra_inicio, letra_final));

	cout << "\n\nEl vector resultante es: ";

		for (int i = 0; i < resultado.TotalUtilizados(); i++ ){

			cout << " " << resultado.Elemento(i);

		}

		cout << "\n\n";
}
Пример #3
0
	SecuenciaCaracteres CountingSort_Limites(char inicio,char fin){
		
		SecuenciaCaracteres Ordenados;
		char minimo,maximo,letra_actual;
		int i,j,apariciones;
		int frecuencia[TAMANIO];
		int utilizados_frecuencia;
		minimo=vector_privado[0];
		
		for(i=1;i<total_utilizados;i++){
			if(vector_privado[i]<minimo)
				minimo=vector_privado[i];
				
		}
		
		maximo=vector_privado[0];
		
		for(i=1;i<total_utilizados;i++){
			if(vector_privado[i]>maximo)
				maximo=vector_privado[i];
		}
		
		utilizados_frecuencia=maximo-minimo+1;
		letra_actual=minimo;	
		
		for(i=0;i<utilizados_frecuencia;i++){
			apariciones=0;
			for(j=0;j<total_utilizados;j++){
				if(vector_privado[j]==letra_actual)
					apariciones++;
				
			}
			frecuencia[i]=apariciones;
			letra_actual++;
		}
		
		letra_actual=minimo;
		for(i=0;i<utilizados_frecuencia;i++){
			for(j=0;j<frecuencia[i];j++){
				if(letra_actual>=inicio && letra_actual<=fin)
					Ordenados.Aniade(letra_actual);
			}
			letra_actual++;
		}
		return Ordenados;
	}
int main () {
	
	SecuenciaCaracteres cadena;
	int tope,i;
	char caracter;
	
	cin>>caracter;
	
	while(caracter!='#'){
		cadena.Aniade(caracter);
		cin>>caracter;
	}
	
	
	
	tope=cadena.TotalUtilizados();
	for (i = 0; i < tope; i++)
      cout  << cadena.Elemento(i);
      
   cadena.EliminaRepetidos();
      
   tope=cadena.TotalUtilizados();
	for (i = 0; i < tope; i++)
      cout  << cadena.Elemento(i);
      
      
   system("pause");
   
}
int main() {
    SecuenciaCaracteres palabra;
    SecuenciaCaracteres para_insertar;

    palabra.AniadeCadena("abcdefgh");
    para_insertar.AniadeCadena("jklmn");

    int tope = palabra.TotalUtilizados();

    for(int i=0; i<tope; i++) {
        cout << palabra.Elemento(i);
    }
    cout << endl;

    palabra.Reemplaza(1,3,para_insertar);

    tope = palabra.TotalUtilizados();

    for(int i=0; i<tope; i++) {
        cout << palabra.Elemento(i);
    }

    cout << "\n\n";
}
Пример #6
0
int main(){
	SecuenciaCaracteres frase;
	int tope;

	frase.Aniade('c');
	frase.Aniade('b');
	frase.Aniade('b');
	frase.Aniade('a');
	frase.Aniade('b');
	frase.Aniade('c');
	frase.Aniade('c');
	frase.Aniade('a');
	frase.Aniade('g');
	frase.Aniade('c');
	frase.Aniade('b');
	frase.Aniade('g');
	frase.Aniade('c');
	
	tope = frase.TotalUtilizados();

	for (int i = 0; i < tope; i++)
		cout  << frase.Elemento(i) << " ";


	tope = frase.TotalUtilizados();          

	cout << "\n";

	for (int i = 0; i < tope; i++)
		cout  << frase.CountingSort().Elemento(i) << " ";

	
	tope=frase.CountingSort_Limites('b','g').TotalUtilizados();
	cout << "\n";
	for (int i = 0; i < tope; i++)
		cout  << frase.CountingSort_Limites('b','g').Elemento(i) << " ";
	
	
	system ("pause");
}
Пример #7
0
	SecuenciaCaracteres Ordena(char caracter1, char caracter2){

		SecuenciaCaracteres objeto;
		char letra;
		int indice;
		char minimo = 0;
		char maximo = 0;
		int frecuencia[30];
		int frecuencia_utilizados = 0;
		char letra_inicio = caracter1;
		char letra_final = caracter2;
		//calculamos maximo y minimo

		for(int i = 0; i < total_utilizados; i++){

			indice = vector_privado[i];
			rango[indice]++;

		}

		for(int i=0; i < LETRAS_HASTA_N; i++){

			letra = i;

			if (ElementoRango(i) > 0){

				if (minimo == 0){

					minimo = letra;

				}

				maximo = letra;

			}

		}

		for(int i = letra_inicio; i <= letra_final; i++){

				frecuencia[frecuencia_utilizados] = rango[i];
				frecuencia_utilizados++;

		}

		//almacenamos los caracteres tantas veces como indica la frecuencia

		letra = letra_inicio;

		for(int i = 0; i < frecuencia_utilizados; i++ ){

			for(int x = 0; x < frecuencia[i]; x++){

				objeto.Aniade(letra);

			}	

			letra = letra + 1;

		}

		return objeto;


	}