torus711 のアレ

主に競技プログラミングの問題について書きます

TopCoder, SRM 638, Division 2, Level 1 : NamingConvention

問題概要

 英小文字と '_' からなる文字列が与えられる。この文字列は、単語の間に '_' を挟むことで単語の切れ目を明示する形式(スネークケース)である。キャメルケース(単語の先頭を大文字にする形式)に変換せよ。

解法

 元の文字列から '_' を除去した上で、単語の先頭を大文字にできればよいです。そのためには、文字列を先頭から走査しつつ、

  • '_' を見つけたら、次の文字を大文字にして答えに追記
  • それ以外はそのまま答えに追記

とすれば実現できます。

コード

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i )

class NamingConvention
{
public:
	string toCamelCase( string variableName )
	{
		string res;
		REP( i, 0, variableName.size() )
		{
			if ( variableName[i] == '_' )
			{
				i++;
				variableName[i] = toupper( variableName[i] );
			}
			res += variableName[i];
		}
		return res;
	}
};