AOJ 0111 - Doctor's Memorable Codes

#include<iostream>
#include<map>

std::string to_bs(int i){
	std::string s = "";
	while(i > 0){
		s = static_cast<char>(i%2+'0') + s;
		i /= 2;
	}
	while(s.length() < 5){
		s = '0' + s;
	}
	return s;
}

int main(){
	std::map<char, std::string> input;
	std::map<std::string, char> output;
	output["101"] = ' ';
	output["000000"] = '\'';
	output["000011"] = ',';
	output["10010001"] = '-';
	output["010001"] = '.';
	output["000001"] = '?';
	output["100101"] = 'A';
	output["10011010"] = 'B';
	output["0101"] = 'C';
	output["0001"] = 'D';
	output["110"] = 'E';
	output["01001"] = 'F';
	output["10011011"] = 'G';
	output["010000"] = 'H';
	output["0111"] = 'I';
	output["10011000"] = 'J';
	output["0110"] = 'K';
	output["00100"] = 'L';
	output["10011001"] = 'M';
	output["10011110"] = 'N';
	output["00101"] = 'O';
	output["111"] = 'P';
	output["10011111"] = 'Q';
	output["1000"] = 'R';
	output["00110"] = 'S';
	output["00111"] = 'T';
	output["10011100"] = 'U';
	output["10011101"] = 'V';
	output["000010"] = 'W';
	output["10010010"] = 'X';
	output["10010011"] = 'Y';
	output["10010000"] = 'Z';
	
	for(int i=0;i<26;i++){
		input['A' + i] = to_bs(i);
	}
	input[' '] = "11010";
	input['.'] = "11011";
	input[','] = "11100";
	input['-'] = "11101";
	input['\''] = "11110";
	input['?'] = "11111";

	std::string s;
	while(std::getline(std::cin, s), !std::cin.eof()){
		std::string code;
		for(int i=0;i<s.size();i++){
			code += input[s[i]];
		}

		std::string res = "", temp_s = "";
		for(int i=0;i<code.size();i++){
			temp_s += code[i];
			if(output[temp_s]){
				res += output[temp_s];
				temp_s = "";
			}
		}
		
		std::cout << res << std::endl;
		std::cin.clear();
	}
}