C++の生文字列リテラル(Raw String Literal)とは?意味と使い方を実例付きで解説
本記事では、C++における生文字列リテラル(Raw String Literal)の意味と、具体的なコード例をわかりやすく解説します。
生文字列リテラルとは?
C++には「\n」(改行)や「\t」(タブ)といったエスケープ文字が存在します。通常の文字列リテラルでエスケープ文字を出力しようとしても、画面には改行やタブとして表示されるだけで、「\n」や「\t」という文字そのものは出力されません。
そこで活躍するのが生文字列リテラルです。文字列の先頭に R"(文字列)" のように R を付けることで、エスケープ文字が解釈されず、そのまま文字として出力されるようになります。
コード例1:改行文字(\n)の場合
まずは、通常の文字列と生文字列リテラルの違いを例で確認してみましょう。
#include <iostream>
using namespace std;
int main(){
string str = "tutorials\npoint\n" ;
// 生文字列リテラル
string str_R = R"(tutorials\npoint\n)";
cout <<"String is: "<<str << endl;
cout <<"Raw String is: "<<str_R;
return 0;
}出力結果
上記のコードを実行すると、以下のような出力が得られます。
String is: tutorials point Raw String is: tutorials\npoint\n
通常の文字列 str では「\n」が改行として処理されましたが、生文字列リテラルの str_R では「\n」がそのまま文字として表示されているのがわかります。
コード例2:タブ文字(\t)の場合
次に、タブ文字「\t」を使った例を見てみましょう。
#include <iostream>
using namespace std;
int main(){
string str = "tutorials\tpoint\t" ;
// 生文字列リテラル
string str_R = R"(tutorials\tpoint\t)";
cout <<"String is: "<<str << endl;
cout <<"Raw String is: "<<str_R;
return 0;
}出力結果
上記のコードを実行すると、以下のような出力が得られます。
String is: tutorials point Raw String is: tutorials\tpoint\t
まとめ
生文字列リテラルを使うことで、エスケープ文字をそのまま文字列として扱うことができます。正規表現やWindowsのファイルパス(例: R"(C:\Users\test)")のように、バックスラッシュが多用される文字列を扱う際には、エスケープの二重記述が不要になり、コードが大幅に読みやすくなるため、実務でも非常に便利な機能です。
-
C++で文字列sをtに変換するための最小変更回数を求める
問題の概要 同じ長さを持つ2つの文字列 s と t があり、どちらも小文字の英字のみで構成されているとします。まず文字列 s を任意の順序に自由に並べ替え、その後、s を t と一致させるために必要な最小の文字置換回数を求めます。 例えば、入力が s = eccynue、t = science の場合、答えは 2 になります。これは、eccynue を yccence に並べ替えた後、先頭の y を s に、2番目の c を i に置き換えることで science に変換できるためです。 解決のためのアプローチ この問題の鍵となるのは、並べ替えによって一致させられる文字はできるだけ多く一致
-
C++で2つの2進数文字列を加算するプログラムの書き方
2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁