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 ]