我、不知其宿題與課題也。そも、宿題と課題とは、同じ義には候はずや。ただし、これ易き文字列処理問題にて候。
・大文字は小文字に、数字は'0','1','2'...を'9','8','7'...と反転させる。
・ただし、'#'以降の文字は変換しない。
・例として "Abc012_59F_#012Gh"を渡した場合の戻り値は "abc987_40f_#012Gh"となる。
僭越ながら、ユーザー定義リテラルを用ひ候。
// 名前空間に入れること肝要なり。 namespace udl { // ユーザー定義リテラルてふものなり。 std::string operator "" _conv( char const *ptr ) { std::string temp(ptr) ; std::transform( temp.begin, std::find(temp.begin, temp.end, '#') , temp.begin() // ラムダてふ便利な無名関数なり。 , [] (char const c ) -> char { if ( c >= '0' && c <= '9') return '9' - c + '0' ; if ( c >= 'A' && c <= 'Z' ) return c - 'A' + 'a' ; return c ; } ) ; return temp ; } } int main() { //使う際には、using declarationにて指定する必要有之候。 using udl::operator "" _conv ; std::cout << "Abc012_59F_#012Gh"_conv << std::endl ; }
げにユーザー定義リテラルてふものは、その易きこと如此。
No comments:
Post a Comment