忽略转义序列c ++

时间:2014-02-04 21:36:51

标签: c++ string

我试过搜索谷歌但找不到答案,任何人都可以告诉如何忽略存储在字符串中的转义字符。我正在使用一个包含不同字符的数组

string str[]={"| | / / ||","| |/ / ||", "| | ( \ \ \ \`_."}

来自编译器的错误消息:

中的“未知逃脱序列”

2 个答案:

答案 0 :(得分:9)

正如@Zac已经指出的那样,你可以逃避\以避免这个问题。你可以找到更清晰的 1 的另一种方法是使用原始字符串文字:

string str[]={R"(| | / / ||)",R"(| |/ / ||)", R"(| | ( \ \ \ \`_.)"};

由于从该示例中不明显,我将指出一个额外的细节:如果您的字符串可能包含)字符,您可以在左括号之前添加更多分隔符,这也必须在下一个匹配到右括号,像这样:

string s = R"!(This (might be) an MS-DOS path\to\a\string)!";

编辑:哦,另一个小细节:原始字符串文字产生与普通字符串文字相同类型的结果。你可以自由地混合两者。例如,我可以将上面的前两个文字保留为普通文字,并且只将第三个文字视为原始文字,因为它是唯一包含反斜杠的文字。对于初始化一个数组(或其他集合),我更喜欢将它们全部变为原始数据,但是为了保持一致性,这是严格的个人偏好,而不是语言所需要的。


1.以防万一:这是C ++ 11的新功能,所以如果您使用的是较旧的编译器,则可能不支持此功能。 功能

答案 1 :(得分:5)

您必须逃避\字符。你的字符串看起来像这样:

string str[]={"| | / / ||", "| |/ / ||", "| | ( \\ \\ \\ \\`_."};

在C ++(以及大多数其他基于C语言的语言)中,\用于表示转义字符(例如\r\n\t等)。如果您想在字符串中包含实际的“\”字符,则必须将其转义:\\