C++ で文字列をトリムする方法

胡金庫 2023年10月12日
C++ で文字列をトリムする方法

この記事では、C++ で文字列をトリミングする方法を説明します。

文字列のトリミング関数を実装するには erase()find_first_not_of()find_last_not_of() メソッドを使用する

標準の C++ ライブラリには文字列トリミングのための関数が含まれていないので、自分で実装するか、Boost のような外部ライブラリを利用する必要があります(文字列アルゴリズム参照)。

以下の例では、2つの組み込みの std::string メソッドを用いてカスタム関数を構築する方法を示します。まず、引数として渡された文字を文字列の左側から切り取る leftTrim 関数を実装します。トリムする文字は .,/, 空白を任意に指定しています。

leftTrim 関数は find_first_not_of メソッドを呼び出して、引数に含まれる char-s と一致しない最初の文字を探し、その位置を返します。そして erase メソッドは先頭から見つかった位置までの文字の範囲を削除します。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string& leftTrim(string& str, string& chars) {
  str.erase(0, str.find_first_not_of(chars));
  return str;
}

int main() {
  string chars_to_trim = ".,/ ";
  string text = ",.,  C++ Standard";

  cout << text << endl;
  leftTrim(text, chars_to_trim);
  cout << text << endl;

  return EXIT_SUCCESS;
}

出力:

,.,  C++ Standard
C++ Standard

あるいは、trimLeft 関数を元に戻して、文字列の右側から与えられた文字をトリミングすることもできます。この場合は find_last_not_of メソッドを利用します。これに対応して、erase メソッドは found position + 1 パラメータを指定して呼び出されます。

これらの関数はどちらもその場で文字列を操作していることに注意してください。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string& rightTrim(string& str, string& chars) {
  str.erase(str.find_last_not_of(chars) + 1);
  return str;
}

int main() {
  string chars_to_trim = ".,/ ";
  string text = "C++ Standard /././";

  cout << text << endl;
  rightTrim(text, chars_to_trim);
  cout << text << endl;

  return EXIT_SUCCESS;
}

出力:

C++ Standard /././
C++ Standard

最後に、前の関数を組み合わせて trimString 関数を実装することができます。この関数は左右のバージョンと同じパラメータを持っています。trimStringrigthTrim 関数の結果を引数に渡すことで leftTrim を呼び出します。これらの関数呼び出しの場所を入れ替えても、プログラムの正しさを変えることはありません。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string& leftTrim(string& str, string& chars) {
  str.erase(0, str.find_first_not_of(chars));
  return str;
}

string& rightTrim(string& str, string& chars) {
  str.erase(str.find_last_not_of(chars) + 1);
  return str;
}

string& trimString(string& str, string& chars) {
  return leftTrim(rightTrim(str, chars), chars);
}

int main() {
  string chars_to_trim = ".,/ ";
  string text = ",,, ..    C++ Standard  ...";

  cout << text << endl;
  trimString(text, chars_to_trim);
  cout << text << endl;

  return EXIT_SUCCESS;
}
,,, ..    C++ Standard  ...
C++ Standard
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ String