C++11 raw strings literals tutorial

来源:互联网 发布:有肉的耽美网络剧 编辑:程序博客网 时间:2024/04/27 14:43

Now, that I have a working system that can compile both regular expressions and raw strings literals, it is time to show you how you can further simplify the examples from the regex tutorial.

Basically a raw string literal is a string in which the escape characters (like \n \t or \" ) of C++ are not processed. A raw string literal starts with R"( and ends in )", let's see an in an example the difference between a normal string and a raw string in C++:

 1 #include <iostream> 2 #include <string> 3  4 using namespace std; 5  6 int main() 7 { 8     string normal_str="First line.\nSecond line.\nEnd of message.\n"; 9     string raw_str=R"(First line.\nSecond line.\nEnd of message.\n)";10     cout<<normal_str<<endl;11     cout<<raw_str<<endl;12     return(0);13 }

normal_str will be processed at compilation time so you will see three lines of text and an empty line. In the case of the variable raw_str which is a raw string literal, the compiler will not process the escape characters, so you will see a single line of text with a content identical with what you have in the C++ source code.

If you compile and run the above code, saved in a file named "raw_string_00.cpp", this is what you should see:

1 sol@sol:~$ clang++ -std=c++11 -stdlib=libc++ raw_string_00.cpp2 sol@sol:~$ ./a.out3 First line.4 Second line.5 End of message.6 7 First line.\nSecond line.\nEnd of message.\n8 sol@sol:~$

If you don't have clang and libc++ on your machine you could also compile the above code with g++-4.6.1, in this case you would use this line for compiling the code:

1 g++ -std=c++0x raw_string_00.cpp

or, for gcc-4.7 and up:

1 g++ -std=c++11 raw_string_00.cpp

The above piece can not be compiled with Visual Studio 2010 which lack support for raw string literals at the time of this writing.

A first application of the concept of a raw string is in simplifying the syntax of the regular expressions. The coder can put his effort in writing a regular expression conformal to the ECMAScript standard and not in ensuring that his regular expression will be correctly processed by the compiler.

Take as an example the regular expression used in the regex tutorial for checking if the user input is an integer number. Without raw strings this is how the code should look (and if you want to use it with VS 2010 you must keep it this way):

1 regex integer("(\\+|-)?[[:digit:]]+");

Using a raw string we can simplify the above piece of code, we can get rid of the escaping characters:

1 string raw_pattern=R"((\+|-)?[[:digit:]]+)";2 regex integer(raw_pattern);

or, a more condensed version:

1 regex integer(R"((\+|-)?[[:digit:]]+)");

A pattern for matching a real numbers, see the regex tutorial, can be written this way:

 1 ... 2     string input; 3     regex rr(R"(((\+|-)?[[:digit:]]+)(\.(([[:digit:]]+)?))?((e|E)((\+|-)?)[[:digit:]]+)?)"); 4     cout<<"Give me a real number!"<<endl; 5     cin>>input; 6     if(regex_match(input,rr)) 7       cout<<"float"<<endl; 8     else 9     {10       cout<<"Invalid input"<<endl;11     }12 ...

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胃胀气想吐怎么办快速 胃胀然后吐了怎么办 1岁宝宝胃胀气怎么办 孩子胃胀气还吐怎么办 肚子里进了凉气怎么办 肠胃涨气肚子变大怎么办 感觉肚子胀胀的怎么办 肚子胀撑的难受怎么办 肚子着凉了很疼怎么办 来月经肚子疼怎么办最快的方法 孕妇上大便有血怎么办 做完爱小腹坠痛怎么办 月经不来肚子胀怎么办 月经期间肚子疼的厉害怎么办 大姨吗来了肚子疼该怎么办 孕妇7个月拉肚子怎么办 胃疼肚子也疼怎么办 6个月孕妇肚子疼怎么办 孕妇4个月肚子疼怎么办 孕妇5个月拉肚子怎么办 4个月孕妇拉肚子怎么办 怀孕5个月拉肚子怎么办 肠胃老是胀气很不舒服怎么办 肚子里有气排不出来怎么办 小兔子不吃兔粮怎么办 泰迪肚子一直叫怎么办 狗狗肚子响该怎么办 狗狗肚子一直响怎么办 一刮风空调就响怎么办 胃里有气往上顶怎么办 胃里难受想吐怎么办 胃里感觉有水怎么办 喉咙总有气堵着怎么办 胃难受恶心想吐怎么办 胃里有气怎么办总放屁 肚子里有气很痛怎么办 胃有气排不出来怎么办 狗狗又吐又拉稀怎么办 狗吐了又拉稀怎么办 金毛狗又拉又吐怎么办 狗狗拉稀像水怎么办