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; }
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"; }
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"; }
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"); }
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; }