2012-05-09 13 views
13

文字列にプレフィックスを付けるC#@記号のC++に相当するものは何ですか?シンボルを自動的にエスケープするには?文字列にプレフィックスを付けるC#@シンボルのC++に相当するものは何ですか?

例:var howManySlashesAreThereIn = @"\\\\\\";

+1

彼は逐語的な文字列を意味します。 – Mehrdad

+0

[String literals C++?]の複製が可能です(http://stackoverflow.com/questions/2597322/string-literals-c) – Mehrdad

+0

@Jake - Gotcha!明確化のためのThanx。 .Net用語は "逐語的文字列リテラル"であり、目的は "\"がエスケープ文字として扱われないようにすることです:http://msdn.microsoft.com/en-us/library/aa691090%28v=vs .71%29.aspx。 Javaや現行バージョンのC++には同等のものはありません(C++ 11は「現行バージョン」とは考えません)。 – paulsm4

答えて

27

C++ 11では、生の文字列リテラルを使用することができます。

std::string s = R"(This\is\a\raw\string\literal)"; 

std::string s = R"*(This \one contains \a)", which would normally end the string)*"; 

は、ここでの C++11 FAQ単語、および referenceです。

8

C++の「生の文字列」機能を探していますが、これはかなり最近の追加です(C++ 11、私は信じています)。

std::string howManySlashesAreThereIn = R"(\\\\\\)"; 

その書物はあなたのために少し乾いたかもしれないがそれは、C++ 11標準の2.14.5 String lieteralsに記載されますので、私は"raw string" c++上にGoogleをお勧めしたいです。

同様"\\\\nasbox\\sharename\\downloads\\super_sekrit_stuff"ようmonstrositesを倍増それらの脱出を取り除くように、それはまた、あなたが「\n文字を追加すると、隣接する文字列を組み合わせた」など回すようなトリックをバイパスすることができます:

htmlString = 
    "<HTML>\n" 
     "<HEAD>\n" 
     "<TITLE>My page</TITLE>\n" 
     "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\">\n" 
     "</HEAD>\n" 
     "<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n" 
     "<P> </P>\n" 
     "<PRE>\n"; 

をより読みやすいものに(ない正確同じによる第二の変形にスペースに、しかし完全に大丈夫HTMLのために、それはこの場合には追加のスペースは無視されますので):

htmlString = R"xyzzy(
    <HTML> 
     <HEAD> 
     <TITLE>My page</TITLE> 
     <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> 
     </HEAD> 
     <BODY LINK="#0000ff" VLINK="#800080" BGCOLOR="#ffffff"> 
     <P> </P> 
     <PRE> 
    )xyzzy"; 
+0

これは古いですが、 'R '(.. )最後の例では "' 'であり、生の文字列であるためバックスラッシュを使用しないでください。 – Rapptz

+0

書かれた最初のバージョンには、2番目のバージョンが示す字下げはありません。インデントをしたい場合は、旧式のバージョンの左引用符をすべて左に移動して空白を累積することができます。生の弦はより簡単に得ることができます。 – emsr

4

C++ 11は、少なくともいくらか類似したrawの文字列リテラルを追加します。 、伝統的なリテラルのようになります

R"@(\w+\d*)@" 

...:

"\\w+\\d*" 

違いは巨大ではありませんが、これらのような正規表現、のために特に有用である

R"(This is a raw literal)"; 

それは、特に長い正規表現では、違いを生むことができます。

+0

デリミタ '@'は引用符の中になければなりません。 – user362515

+0

@ user362515:Oops - タイプミスがコンパイラを実行しないうちに、ほぼ4年間生き残ることができます。 –

0

Hereは、生の文字列リテラル(C++ 11)の例です。

改行とバックスラッシュはそのまま表示されます。

関連する問題