/*
Escriba un programa en C++ que lea una frase (asuma minúsculas) de máximo 25
palabras (sin signos ortográficos ni tildes ni ñ) y la ordene alfabéticamente,
utilice el método de ordenación por selección.
Ejemplo de salida:
> Escriba una frase: la obra maestra de la injusticia es parecer justo sin serlo
> Frase ordenada: de es injusticia justo la la maestra obra parecer serlo sin
*/
#include <iostream>
#include <string>
using namespace std;
void imprimir(string vector[], int n){
for (int i=0; i<n; i++)
cout<<vector[i]<<" ";
cout<<endl;
}
void ordSeleccion(string vector[], int n){
int indMenor;
string aux;
for(int i=0; i<n-1; i++){
indMenor=i;
for(int j=i+1; j<n; j++)
if(vector[j] < vector[indMenor])
indMenor=j;
if(i != indMenor){
aux = vector[i];
vector[i] = vector[indMenor];
vector[indMenor] = aux;
}
}
}
int main(){
int n=0, i, ini=0;
string frase;
string vector[25]; //Crea el vector para las 25 palabras
int pos[25]={}; //Crea el vector para las posiciones de los 25 espacios
cout<<"Ingrese la frase: ";
getline(cin, frase);
//Contar palabras
for(i=0; i<frase.length(); i++)
if (frase[i] == ' ') //Cuenta espacios
n++;
if (n > 24)
return 0; //Termina si tiene mas de 24 espacios
//Armando el vector de espacios
ini=0;
for(i=0; i<n; i++){
pos[i] = frase.find(" ", ini);
ini = pos[i]+1;
}
pos[i] = frase.length(); //Coloca un espacio al final de la frase
//Armando la lista de palabras
ini = 0;
for(i=0; i<n+1; i++) //Busca cada espacio
{
vector[i] = frase.substr(ini, pos[i]-ini);
ini = pos[i]+1;
}
imprimir(vector, n+1); //La cantidad de palabras es la cantidad de espacios mas 1
ordSeleccion(vector, n+1);
imprimir(vector, n+1);
return 0;
}