std::string の前後の余分な空白文字を取り除く - C++ プログラミング
PROGRAM
std::string の前後の余分な空白文字を取り除く
C++ の std::string には、前後の余分な空白文字を削除するための trim 関数は用意されていないので、std::string 内を検索する で紹介した関数を使って trim 関数を自作してみます。
ここでは、空白文字・水平タブ・垂直タブ・改行文字を、取り除く対象としています。
std::string trim(const std::string& string, const char* trimCharacterList = " \t\v\r\n")
{
std::string result;
// 左側からトリムする文字以外が見つかる位置を検索します。
std::string::size_type left = string.find_first_not_of(trimCharacterList);
if (left != std::string::npos)
{
// 左側からトリムする文字以外が見つかった場合は、同じように右側からも検索します。
std::string::size_type right = string.find_last_not_of(trimCharacterList);
// 戻り値を決定します。ここでは右側から検索しても、トリムする文字以外が必ず存在するので判定不要です。
result = string.substr(left, right - left + 1);
}
return result;
}
まず、左から削除対象文字以外(残る文字)が現れる位置を検索します。
削除対象文字以外が見つかったら、続けて右側からも検索して、取り除く文字が現れなかった範囲の先頭から末尾までの文字列を substr 関数を使って抽出しています。
削除対象文字以外の文字(残る文字)が見つからなかった場合は、空文字列をそのまま返します。
これで、両側の空白文字を削除する trim 関数ができました。
第二引数の trimCharacterList に任意の文字セットを指定することで、それらの文字を両側に含ま内文字列を取得することもできます。
[ もどる ]