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 に任意の文字セットを指定することで、それらの文字を両側に含ま内文字列を取得することもできます。


[ もどる ]