PEEE802.11

モバイルソフトウェアエンジニアの備忘録

C++でBoost使わずに文字列を分解する

boost::splitを使うと文字列をデリミタで分解してコンテナに格納することができるのだけど、boostが無い環境で同等の機能が欲しくなったので書いてみた。find_first_of()とsubstr()を使う。

void split(std::vector<std::string> &v, const std::string &input_string, const std::string &delimiter)
{
  std::string::size_type index = input_string.find_first_of(delimiter);

  if (index != std::string::npos) {
    v.push_back(input_string.substr(0, index));
    split(v, input_string.substr(index + 1), delimiter);
  } else {
    v.push_back(input_string);
  }
}

int main(int argc, const char * argv[])
{
  std::string input_string, delimiter;
  std::vector<std::string> v;

  std::cout << "input string to split: ";
  std::cin >> input_string;

  std::cout << "specify delimiter: ";
  std::cin >> delimiter;

  split(v, input_string, delimiter);

  for (auto &s : v) {
    std::cout << s << std::endl;
  }

  return 0;
}


結果

input string to split: first,second,third,forth
specify delimiter: ,
first
second
third
forth


再帰で割りとシンプルに書けた。

追記 2014.10

実はのstd::getline()で普通にデリミタ指定ができる模様。無知を恥じます。


getlineはsplitに使える - Faith and Brave - C++で遊ぼう



井の中の蛙

久しく文章を書いていない。もう6、7年ぶりになるだろうか。

 

最近、30代を目前にして、ソフトウェアエンジニアとして岐路に立っていると感じる。今後エンジニアメインで行くのか、マネジメント中心のジェネラリストへ転身するのか。エンジニアでもコーディングやデバッグだけしかしないつもりはなくて、ビジネス的な視点は大切にしていきたいし、業務の改善やチーム内のサポート等気づいたことはやるべきだと思っているのだけど…

 

これからの進路でざっくり考えられるのは以下。 

 

今の会社でエンジニア

給料上がらず。マネジメントに転向させるようプレッシャーを受け続けることになりそう。老害化(若いもんは云々とか言い出さない)しないよう気をつけながら、若い波に負けずこらえられるか。

 

マネジメント / ゼネラリスト

いわゆる中間管理職的な立場。上下の重圧につぶされそう。給料は中期的に見て多少は上がるはずだけど、休日や帰宅後でもメールチェックや着信待機を期待されそう。

 

別の会社でエンジニア

行く会社依存。給料維持とエンジニアとしての楽しさを両立させられる会社は限られそう。モチベーションは一番高く保てそうだし、足りない部分は必死でがんばってエンジニアとして上を目指していくつもりだが、自分がどこまでついていけるかまだしっかりした自信がない。

 

 

ひとまず、エンジニアとしての道で行きていけるよう修行することにする。一般的なソフトウェアエンジニアをネットで見渡してみると、自分が今の仕事でしか通用しないことを痛感する。コーディングやツールやそういう開発の知識や経験はまだ敵わないかもしれない。エンジニアとして補助的に必要な能力、例えばユーザの要求を理解してソリューションに落としこんだり、ビジネスレベルの英語能力、そういうのはある程度あるつもりだけど、本線が使いものにならないと意味がない。小さなことからコツコツとー