i18nizer.cpp

C++でもi18nizer作ってみた.
文字列の区切りに正規表現を使えなかったので,ちょっと仕様が変わりました.

#include <string>
#include <iostream>
#include <sstream>

std::string i18nizer(const std::string& str){
	std::ostringstream oss;
	bool isPeriod=false;
	int length=str.length();
	if(str[length-1]=='.'){
		isPeriod=true;
		length--;
	}
	if(length < 3) return str;
	oss << str[0] << str.substr(1,length-2).length() << str[length-1];
	if(isPeriod) oss << ".";
	return oss.str();
}

int main(int argc,char *argv[]){
	std::string line,token;
	while(std::getline(std::cin,line)){
		std::istringstream iss(line);
		while(!iss.eof()){
			iss >> token;
			std::cout << i18nizer(token) << " ";
		}
		std::cout << std::endl;
	}
	return 0;
}