#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <string.h>

std::vector<std::string> CountChar(char str[]){
	std::vector<std::string> vec;
	std::string s;
	int Len = strlen(str);
	int F = 0;
	int Buf = 0;
	std::sort(str, str + Len);

	Buf = str[0];

	for (int i = 0; i < Len; i++){
		if (Buf != str[i]){
			Buf = str[i];
			str[i] = '\0';
			s = (&str[F]);
			vec.push_back(s);
			str[i] = Buf;
			F = i;
		}
	}
	auto Fun = [](std::string& A, std::string& B){return A.size() < B.size(); };
	//std::sort(vec.begin(), vec.end(), Fun);//why not work? it work on vc2013!

	for (int i = 0; i < vec.size(); i++){
		for (int j = i; j < vec.size(); j++){
			if (Fun(vec[i], vec[j])) std::swap(vec[i], vec[j]);
		}
	}

	return vec;
}

int main(){
	char str[] = "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.";

	auto v = CountChar(str);// str[]'s inner to bloken.in function.

	for (auto& s : v){
		std::cout << s[0] << ':' << s.size() << '[' << s << ']' << std::endl;
	}

	return 0;
}