C++ vector of String Reads and sorts them into ascending sequence

Description

C++ vector of String Reads and sorts them into ascending sequence

#include <iostream>                         // For stream I/O
#include <iomanip>
#include <string>                           // For the string type
#include <locale>                           // For character conversion
#include <vector>                           // For the vector container
using std::string;
int main()//from  w  ww .j av a  2 s.c  o  m
{
  std::vector<string> names;                // Vector of names
  string input_name;                        // Stores a name
  char answer {};                           // Response to a prompt

  do
  {
    std::cout << "Enter a name: ";
    std::cin >> input_name;                 // Read a name and...
    names.push_back(input_name);            // ...add it to the vector

    std::cout << "Do you want to enter another name? (y/n): ";
    std::cin >> answer;
  } while(tolower(answer) == 'y');

  // Sort the names in ascending sequence
  string temp;
  bool sorted {false};                      // true when names are sorted
  while(!sorted)
  {
    sorted = true;
    for(int i {1} ; i < names.size() ; ++i)
    {
      if(names[i-1] > names[i])
      { // Out of order - so swap names
        temp = names[i];
        names[i] = names[i-1];
        names[i-1] = temp;
        sorted = false;
      }
    }
  }

  // Find the length of the longest name
  int max_length{};
  for(auto& name : names)
    if(max_length < name.length()) max_length = name.length();

  // Output the sorted names 5 to a line
  std::cout <<"In ascending sequence the names you entered are:\n";
  int field_width = max_length + 2;
  int count {};
  for(auto& name : names)
  {
    std::cout << std::setw(field_width) << name;
    if(!(++count % 5)) std::cout << std::endl;
  }
     std::cout << std::endl;
}



PreviousNext

Related