読者です 読者をやめる 読者になる 読者になる

AOJ 1044 Camel Case

問題

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1044

解法

これもシュミレーション問題かな。たぶんそうだと思います。

与えられた文字列の記法が分かれば記法ごとに別の記法に変える。

最初は一緒くたに変換しようとしてWA出してた。

コード

string name;
char type;

int main(){
  while(cin >> name >> type){
    if(type == 'X') break;
    if(name.find("_") != std::string::npos){
      if(type == 'D') goto e;
      if(type == 'U') name[0] -= 32;
      rep(i, name.size()){
    if(name[i] != '_') continue;
    name.erase(name.begin()+i);
    name[i] -= 32;
      }
    }else{
      if(type == 'L' ){ if(name[0] < 97) name[0] += 32;}
      else if(type == 'U'){ if( name[0] > 96) name[0] -= 32;}
      else{
    if(name[0] < 97) name[0] += 32;
    rep(i, name.size()){
      if(name[i] > 96) continue;
      name[i] += 32;
      name.insert(i, "_");
    }
      }
    }
  e:
    cout << name << endl;
  }
  return 0;
}

最初に三つに分けてから処理書いた方が分かりやすかったと思う