Stefan Ram wrote:
> I read a question in a newsgroup today about adjusting columns.
> So I wanted to implement this in C++ as a small exercise.
>
> I wanted to get from
>
> ::std::string source = R"(
> Alpha Beta Gamma Delta Epsilon
> Zeta Eta Theta Iota Kappa
> Lambda My Ny Xi Omikron
> Pi Rho Sigma Tau Ypsilon
> Phi Chi Psi Omega
> )";
>
> to
>
> Alpha Beta Gamma Delta Epsilon
> Zeta Eta Theta Iota Kappa
> Lambda My Ny Xi Omikron
> Pi Rho Sigma Tau Ypsilon
> Phi Chi Psi Omega
>
Just for entertainment, I did it like this:
----------------------------------------
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <sstream>
std::vector<std::string> split(const std::string &input)
{
std::istringstream buff(input);
std::vector<std::string> r;
std::string blah;
while(buff >> blah) {
r.push_back(blah);
}
return r;
}
std::vector<size_t> getColWidths(const std::vector<std::string> &strings,
size_t colCount)
{
std::vector<size_t> widths(colCount, 0);
for(size_t i = 0; i < strings.size(); ++ i) {
size_t col = i % colCount;
size_t length = strings[i].size();
if(length > widths[col]) {
widths[col] = length;
}
}
return widths;
}
void writeStrings(const std::vector<std::string> &strings,
const std::vector<size_t> &widths,
size_t colCount)
{
for(size_t i = 0; i < strings.size(); ++ i) {
std::string s = strings[i];
size_t width = widths[i % colCount] + 1;
std::cout << std::setw(width) << std::left << s;
if((i + 1) % colCount == 0) {
std::cout << std::endl;
}
}
std::cout << std::endl;
}
int main(int argc, char* argv[])
{
std::string input = "Alpha Beta Gamma Delta Epsilon"
" Zeta Eta Theta Iota Kappa"
" Lambda My Ny Xi Omikron"
" Pi Rho Sigma Tau Ypsilon"
" Phi Chi Psi Omega";
std::vector<std::string> strings = split(input);
std::vector<size_t> widths = getColWidths(strings, 5);
writeStrings(strings, widths, 5);
return 0;
}
--
---------------------------------------------
demangle my email address in the obvious way.