pyてよn日記

一寸先は闇が人生

C++:正規表現,文字列の入出力に関するまとめ

記事を書く余裕がなくて自分用にまとめただけの記事です.かなり見辛いと思います.

C++正規表現を扱う手順:std::regex

インクルードが必要なヘッダ:std::regex#include <regex>

  1. 検索にかけたい文字列を定義 or 標準入力.
  2. 正規表現の定義.R"(正規表現)"C++ で raw 文字列を扱える(\エスケープする必要がなくなる):string pattern = R"(hogehoge)";(一番外側の括弧はマッチ全体.内側に括弧を入れることでマッチ結果のグルーピングができる)
  3. マッチ結果を受け取るオブジェクトの定義.
    • string クラス:std::smatch クラス で定義.
    • C 言語の文字列(文字列リテラルなど):std::match_results<const char*> クラスで定義.
  4. 正規表現で検索:std::regex_search(文字列 or 文字列変数, results, std::regex(pattern))(マッチしたかどうかのフラグとしても扱える)
  5. マッチオブジェクト results から結果を受け取る.マッチしたグループへのアクセスもできる.
    • results[0]:マッチ全体
    • results[1]:一つ目のグループへアクセス

marycore.jp

標準入力を 1 行丸々受け取る:std::getline, std::cin.ignore

 std::cin >> N; で行数を受け取り,その後 N 行分のログを受け取る,などの操作の時に用いる.

  • std::getline(std::cin, 文字列変数) で,変数に標準入力の 1 行分を丸々格納.
  • std::cin >> N; などと併用する場合,直後に cin.ignore(); を付け足し,改行文字 1 文字分を無視する必要がある.その後 std::getline を実行する.

 std::cin >> N; では,入力の "N\n""N" 部分だけを受け取り "\n" を残したままにしてしまう.そのため,入力が改行されている場合,cin.ignore(); を直後に実行しないとその後の入力を上手く受け取れないため注意.

simanman.hatenablog.com

wikiwiki.jp

正規表現サンプル

gimite.net

www-creators.com

www.simple-edition.com