// C++ program to sort an array of
// integers alphabetically
#include <bits/stdc++.h>
using namespace std;
// Variable to store the word form of
// units digit and up to twenty
string one[]
= { "", "one ", "two ", "three ",
"four ", "five ", "six ",
"seven ", "eight ", "nine ", "ten ",
"eleven ", "twelve ", "thirteen ",
"fourteen ", "fifteen ", "sixteen ",
"seventeen ", "eighteen ", "nineteen " };
// Variable to store the word form of
// tens digit
string ten[]
= { "", "", "twenty ",
"thirty ", "forty ",
"fifty ", "sixty ",
"seventy ", "eighty ",
"ninety " };
// Function to convert a two digit number
// to the word by using the above defined arrays
string numToWords(int n, string s)
{
string str = "";
// If n is more than 19, divide it
if (n > 19)
str += ten[n / 10] + one[n % 10];
else
str += one[n];
// If n is non-zero
if (n)
str += s;
return str;
}
// Function to print a given number in words
string convertToWords(int n)
{
// Stores the word representation
// of the given number n
string out;
// Handles digits at ten millions
// and hundred millions places
out += numToWords((n / 10000000),
"crore ");
// Handles digits at hundred thousands
// and one millions places
out += numToWords(((n / 100000) % 100),
"lakh ");
// Handles digits at thousands and
// tens thousands places
out += numToWords(((n / 1000) % 100),
"thousand ");
// Handles digit at hundreds places
out += numToWords(((n / 100) % 10),
"hundred ");
if (n > 100 && n % 100)
out += "and ";
// Call the above function to convert
// the number into words
out += numToWords((n % 100), "");
return out;
}
// Function to sort the array according to
// the albhabetical order
void sortArr(int arr[], int n)
{
// Vector to store the number in words
// with respective elements
vector<pair<string, int> > vp;
// Inserting number in words
// with respective elements in vector pair
for (int i = 0; i < n; i++) {
vp.push_back(make_pair(
convertToWords(arr[i]), arr[i]));
}
// Sort the vector, this will sort the pair
// according to the alphabetical order.
sort(vp.begin(), vp.end());
// Print the sorted vector content
for (int i = 0; i < vp.size(); i++)
cout << vp[i].second << " ";
}
// Driver code
int main()
{
int arr[] = { 12, 10, 102, 31, 15 };
int n = sizeof(arr) / sizeof(arr[0]);
sortArr(arr, n);
return 0;
}