C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】raw文字列リテラルの使い方をわかりやすく解説

raw文字列リテラルとは

C++11以降では、「raw文字列リテラル(raw string literal)」という便利な機能が利用できます。通常の文字列リテラル内では、\n\t などのエスケープシーケンスが特別な意味を持ちます。例えば \n はカーソルを次の行へ移動させる改行を表し、\t はタブ文字を生成します。

一方で、これらの記号をエスケープシーケンスとして解釈せず、記述した通りの文字としてそのまま出力したいケースもあります。そんなときに役立つのがraw文字列です。文字列をraw文字列として扱うには、文字列リテラルの直前に「R」を付けるだけです。

入力: 文字列 "Hello\tWorld\nC++"
出力: "Hello\tWorld\nC++"

アルゴリズム

ステップ1: 出力したい文字列を用意する
ステップ2: 文字列の前にRを付けてraw文字列にする
ステップ3: 結果を出力して終了

サンプルコード

#include <iostream>
using namespace std;

int main() {
    string my_str = "Hello\tWorld\nC++";
    string raw_string = R"(Hello\tWorld\nC++)";
    cout << "通常の文字列: " << endl;
    cout << my_str << endl;
    cout << "RAW文字列: " << endl;
    cout << raw_string << endl;
    return 0;
}

実行結果

通常の文字列:
Hello	World
C++
RAW文字列:
Hello\tWorld\nC++

raw文字列が便利な場面

raw文字列は、正規表現やWindowsのファイルパスなど、バックスラッシュ(\)を多用する文字列を扱う際に特に威力を発揮します。例えば、Windowsのパスを通常の文字列で表すには "C:\\Users\\name" のようにバックスラッシュを二重にエスケープする必要がありますが、raw文字列なら R"(C:\Users\name)" と書くだけで済みます。また、独自の区切り文字(delimiter)を指定できるため、文字列中に )" という並びが含まれる場合にも柔軟に対応できます。

  1. C++の文字列リテラルとは?意味と基本的な使い方を解説

    文字列リテラルとは文字列リテラル(string literal)は、匿名文字列(anonymous string)とも呼ばれ、プログラミングにおいてソースコード内で文字列の値を直接表現するためのリテラルの一種です。より簡単に言えば、ダブルクォーテーション()で囲まれたテキストのことを文字列リテラルと呼びます。記述例const char* var = Hello;上記の var の定義において、Hello の部分が文字列リテラルです。このように const を付けることで、var を使って文字列を参照することはできますが、内容を変更することはできません。C++コンパイラによる扱いC++のコンパイ

  2. C#入門:文字列リテラルとStringオブジェクトの基本をわかりやすく解説

    文字列リテラルとはC#における文字列リテラル(定数)は、ダブルクォート「」または「@」で囲んで表現します。文字列には、通常の文字、エスケープシーケンス、ユニバーサル文字など、文字リテラルと同様の要素を含めることができます。文字列リテラルの記述例は以下の通りです。Hello, World Welcome, \文字列リテラルの使用例次のコードは、通常の文字列リテラルと、@付きの逐語的リテラル(verbatim string literal)を使った複数行文字列の例です。using System; namespace Demo { class Program { sta