【C++】std::stringをtrim(トリミング)する関数を作る

std::stringには前後のスペース等をトリミングする関数は用意されていないので、自作します。

std::stringをtrimする関数を作る

今回は、前方をトリミングする関数、後方をトリミングする関数、前方・後方のトリミングを選択できる関数の3つを作ります。

前方のみをトリミングする関数

まずは、前方のみをトリミングする関数を作成します。

第一引数にトリミングしたい文字列を指定して、第二引数にトリミングする文字列をセットします。

#include <iostream>
#include <string>

/**
 * @brief 前方Trim関数
*/
std::string trimF(std::string src, std::string tr)
{
  size_t start_pos = src.find_first_not_of(tr);
  return src.substr(start_pos);
}

int main()
{
  std::string str = "    test    test    test    ";
  std::string tr = " ";    // 半角スペース

 std::cout << "前方Trim:[" << trimF(str, tr) << "]" << std::endl;

  return 0;
}
【出力】
前方Trim:[test    test    test    ]

後方のみをトリミングする関数

次は、後方のみをトリミングする関数を作成します。

第一引数にトリミングしたい文字列を指定して、第二引数にトリミングする文字列をセットします。

#include <iostream>
#include <string>

/**
 * @brief 後方Trim関数
*/
std::string trimR(std::string src, std::string tr)
{
  size_t end_pos = src.find_last_not_of(tr);
  return src.substr(0, end_pos+1);
}

int main()
{

  std::string str = "    test    test    test    ";
  std::string tr = " ";    // 半角スペース

  std::cout << "後方Trim:[" << trimR(str, tr) << "]" << std::endl;

  return 0;
}
【出力】
後方Trim:[    test    test    test]

前方・後方のトリミング有無を選択できる関数

最後は、前方のみトリミング・後方のみトリミング・両方トリミング・トリミング無しを選べる関数を作成します。

上記2つの関数の上位互換で、これだけあれば大丈夫!

第一引数と第二引数は上記2つの関数と同じですが、第三関数にフラグを持たせています。
フラグは、1が前方のみ、2が後方のみ、3が両方、それ以外はトリミング無しとなっています。

#include <iostream>
#include <string>

/**
 * @brief 前方・後方選択Trim関数
 * @param[in] flag 1:前方 2:後方 3:両方
*/
std::string trim(std::string src, std::string tr, uint8_t flag = 0)
{
  size_t start_pos, end_pos;
  start_pos = ((flag == 1 || flag == 3) ? src.find_first_not_of(tr) : 0);
  end_pos = ((flag == 2 || flag == 3) ? src.find_last_not_of(tr) : src.size());
  return src.substr(start_pos, end_pos - start_pos + 1);
}

int main()
{

  std::string str = "    test    test    test    ";
  std::string tr = " ";    // 半角スペース

  std::cout << "前方;[" << trim(str, tr, 1) << "]" << std::endl;
  std::cout << "後方:[" << trim(str, tr, 2) << "]" << std::endl;
  std::cout << "両方:[" << trim(str, tr, 3) << "]" << std::endl;
  std::cout << "無し:[" << trim(str, tr) << "]" << std::endl;

  return 0;
}
【出力】
前方;[test    test    test    ]
後方:[    test    test    test]
両方:[test    test    test]
無し:[    test    test    test    ]

スポンサーリンク

  • この記事を書いた人

まさじぃ

ダメプログラマ歴17年です。 プログラミング関連の事や、 自分で使って良かったもの等の紹介をメインにやっています。

-プログラミング
-