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;
}

コメントする