C++11 raw strings literals tutorial

2023-11-15

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.cpp
2 sol@sol:~$ ./a.out
3 First line.
4 Second line.
5 End of message.
6 
7 First line.\nSecond line.\nEnd of message.\n
8 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 ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 raw strings literals tutorial 的相关文章

  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐

  • spec文件说明

    spec文件概述 spec文件中主要包含4个class Analysis PYZ EXE和COLLECT Analysis以py文件为输入 它会分析py文件的依赖模块 并生成相应的信息 修改的主要是这个部分 PYZ是一个 pyz的压缩包 包
  • #循循渐进学51单片机#定时器与数码管#not.4

    1 熟练掌握单片机定时器的原理和应用方法 1 时钟周期 单片机时序中的最小单位 具体计算的方法就是时钟源分之一 2 机器周期 我们的单片机完成一个操作的最短时间 3 定时器 打开定时器 储存寄存器 的值经过一个机器周期自动加一 也就是说 机
  • 常用文件读写&CSV文件读写&对象的序列化和反序列化

    前言 意识 python中一切皆是对象 常见文件的读写分类 1 普通文本文件 txt py md html doc等 2 二进制文件 图片 音频 视频 压缩包等 3 csv文件 csv 需要借助于系统模块csv 4 对象的序列化和反序列化
  • 使用 sCrypt 实现数独游戏合约

    我们在 BSV 区块链上实现了一个数独游戏智能合约 利用之前介绍过的一种合约范式可以将游戏中寻找解题方案的过程外包上链 因为求解数独问题的计算工作量会随着其行列数快速增长 实际上它也是一个 NP 完全 问题 不过我们可以借由 sCrypt
  • 概率论中伯努利分布(bernoulli distribution)介绍及C++11中std::bernoulli_distribution的使用

    Bernoulli分布 Bernoulli distribution 是单个二值随机变量的分布 它由单个参数 0 1 给出了随机变量等于1的概率 它具有如下的一些性质 P x 1 P x 0 1 P x x x 1 1 x Ex x Var
  • ad如何设置pcb板子形状_AD18软件的PCB制作步骤

    作为一名电子工程师 我们将设计转化为实物的时候 一定会经历的步骤就是就是制作pcb 现在使用较多的都是Altium公司推出的一款AD软件 本人使用的就是这款AD18 当然也有使用Protel99SE软件的 我身边有的工作者还在使用这款软件
  • 合并排序(归并排序)

    合并排序 大致思想便是先将数组中的元素拆分成若干小部分 然后再将这些小部分按照顺序进行重新组合 从而实现排序 很明显 这里用到了分治法的思想 即将一个大问题分成若干个相同的小问题 因为问题规模变小了 所以解决问题的难度也随之减小 试想一下
  • 用户留存的计算

    用户留存的计算 基本是老生常谈了 可是这么多年下来 关于留存的计算 真的是差异太大了 最初版 将每个用户的所有交易月份用group concat 函数进行连接 把对应的结果导出到excel中 然后再用countifs来进行计算 这个方法大概
  • shell脚本中嵌入二进制文件

    最近有人问我 一个集群监控软件的安装文件特别 诡异 说脚本里有 乱码 却能执行 是怎么回事 我看了才发现这个东西原来是典型的脚本嵌套代码的模式 这里就讲讲吧 反正好久没写东西了 某些比较 拽 的单位在发布Linux软件时以一种特殊的形式发布
  • jdbc工作原理

    JDBC是Java数据库连接技术的简称 提供连接各种常用数据库的能力 一 JDBC API 提供者 sun公司 内容 供程序员调用的接口与类 集成在java sql和javax sql包中 如 DriverManager类 Connecti
  • Conditional GAN

    Conditional GAN CGAN 条件GAN 是 Mehdi Mirza 于2014年11月份发表的一篇文章 也是 GAN 系列的早期经典模型之一 是目前许多GAN应用的前身 文章的想法是 希望 可以控制 GAN 生成的图片 而不是
  • 五年软件测试人员,碰到这样的面试题居然心虚...

    我要跳槽 都说金三银四涨薪季 我是着急忙慌的准备简历 5年软件测试经验 可独立测试大型产品项目 熟悉项目测试流程 薪资要求 5年测试经验起码能要个20K吧 我加班肝了一页半简历 投出去一周 面试电话倒是不少 自信满满去面试 现场被问了这么几
  • 腾讯云免费SSL证书申请流程_每年免费50个HTTPS证书

    2023腾讯云免费SSL证书申请流程 一个腾讯云账号可以申请50张免费SSL证书 免费SSL证书为DV证书 仅支持单一域名 申请腾讯云免费SSL证书3分钟即可申请成功 免费SSL证书品牌为TrustAsia亚洲诚信 腾讯云百科分享腾讯云免费
  • [每天一个cmake技巧]cmake开启多核编译

    开启多核编译 可以加快编译速度 大大提升编译效率 具体操作如下 cmake build target all j12 加上 j12即可或者电脑性能足够好 j16
  • 软件(自动化)测试面试基础知识点汇总

    为什么要做接口测试 接口的由来 连接前后端以及移动端 因为不同端的工作进度不一样 所以需要对开始出来的接口进行接口测试 做接口测试的好处 1 节约时间 缩短项目成本 2 提高工作效率 3 提高系统的健壮性 你在项目中如何做接口测试 首先 当
  • 总结——C语言操作符

    总结 C语言操作符 一 算术操作符 算术标识符 加法运算符 加法运算符 加法运算符 加法运算符 加法运算符 只能用于整型 二 移位操作符 移位操作符有两种 gt gt 右移操作符 lt lt 左移操作符 右移操作时分为两种情况 算术右移 逻
  • [leetcode] 827. 最大人工岛

    class Solution private int size 507 507 int fa 507 507 void init for int i 0 i lt n m i fa i i size i 1 int find int x i
  • 华为OD机试真题 完美走位 JavaScript java python c++ 参考解题

    题目描述 在第一人称射击游戏中 玩家通过键盘的A S D W四个按键控制游戏人物分别向左 向后 向右 向前进行移动 从而完成走位 假设玩家每按动一次键盘 游戏人物会向某个方向移动一步 如果玩家在操作一定次数的键盘并且各个方向的步数相同时 此
  • vscode vue : 无法加载文件 C:\Users\xgy\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。有关 详细信息,请参阅 https:

    使用VSCode执行vue V时出现 vue 无法加载文件 C Users xgy AppData Roaming npm vue ps1 因为在此系统上禁止运行脚本 有关 详细信息 请参阅 https go microsoft com f
  • C++11 raw strings literals tutorial

    Now that I have a working system that can compile both regular expressions and raw strings literals it is time to show y