当前位置: 代码迷 >> 综合 >> luogu p1000 超级玛丽 (用原始字符串写)
  详细解决方案

luogu p1000 超级玛丽 (用原始字符串写)

热度:90   发布时间:2024-03-06 08:24:27.0

首先,科技改变命运;
这次咱也用一哈魔法;
这里用的是c++11里面一个小但是实用的特性-原始字符串(raw string literal)

语法:

C++11 终于行动了,引入了原始字符串。最基本的用法是R"(…)",由R开头,双引号内包围着(…),实际的字符序列是小括号内的内容,小括号是字符序列的定界符。当然,左小括号和右小括号是首位对应的。

“原始”(raw)体现在字符串里的字符一就是一,二就是二,不会给你转义。也就是说,传统的"\n"除了字符串结尾符,仅包含换行符,而原始字符串R"(\n)"则包含反斜杠和字符n,这是明显的不同。

从现在来看,貌似已经很好的解决问题了,但如果字符序列里包含)",如R"(坐标: “(x,y)”)",此时编译器是懵的,因为"(对应了两个)"。在这种情况下,我们可以选择其他定界符,如,R"&(坐标: “(x,y)”)&"。语法如下:
R"delim(…)delim",delim的选取比较灵活,最长不超过16个字符,且不为小括号、空白、控制字符和反斜杠。

下面是代码:

#include<iostream>
using namespace std;
int main()
//R"()" 原始字符串最基本的用法;
//不用再一行一行的复制 
{
    cout<<R"( ********************####....#.#..###.....##....###.......###### ### ###........... #...# #...###*####### #.#.# #.#.#####*******###### #.#.# #.#.#...#***.****.*###.... #...# #...#....**********##..... ### ###....**** *****....#### ########## ###### ############################################################## #...#......#.##...#......#.##...#......#.##------------------# ###########################################------------------# #..#....#....##..#....#....##..#....#....##################### ########################################## #----------# #.....#......##.....#......##.....#......# #----------# ########################################## #----------# #.#..#....#..##.#..#....#..##.#..#....#..# #----------# ########################################## ############ )";
}

原始字符串另外的优点:
1, 换行能很好的保留
其他方式都需要人工加\n实现换行。
2,方便拷贝字符串
将拷贝的字符串直接替换R"(…)"中的…,任务就完成了,非常方便。而其他方式,都需要过多的干预拷贝的字符串,非常容易出错。

科技改变命运,靓仔,给爷冲!