👋

[C++] std::stringの両側の空白をすべて削除する

2023/04/30に公開

*昔別のサイトで書いた記事なので、情報が古い場合があります

std::stringの空白を削除する。

C++ポケットリファレンスを参考に作成。コードは

https://github.com/cpp-pocketref/sample-code/blob/master/004_string/017_002_trim_left.cpp

https://github.com/cpp-pocketref/sample-code/blob/master/004_string/017_003_trim_right.cpp

から取得。ただし、グローバル関数をクラス化した。
CC0 1.0 Universal license ってすばらしい。

sample.cpp

// Released under the CC0 1.0 Universal license.

#include <string>
#include <algorithm>

class trimLeftRightSpace
{
public:

  trimLeftRightSpace(){}
  ~trimLeftRightSpace(){}


  std::string trimSpace(std::string&& s)
  {
    std::string::iterator it_left = std::find_if_not(s.begin(), s.end(), isSpace);
    s.erase(s.begin(), it_left);

    std::string::iterator it_right = std::find_if_not(s.rbegin(), s.rend(), isSpace).base();
    s.erase(it_right, s.end());

    return s;
  }

private:

  static bool isSpace(char c)
  {
    return c == ' ';
  }

};


#include <iostream>
#include <utility>
using namespace std;

int main() {
  string s = "   abc   ";

  trimLeftRightSpace trimmer; 
  s = trimmer.trimSpace(move(s));

  cout << '[' << s << ']' << endl;

  return 0;
}

Discussion