当我想要字符串中的特殊字符时,我应该使用“\”:
std::string text("item \t new_item\n")
但是,如果我打印这个字符串,显然会打印出来:
item new_item
有没有办法设置std :: cout来打印所有特殊字符:
item \t new_item \n
答案 0 :(得分:4)
没有内置方法可以做到这一点。您需要手动转义字符。例如,在C中,它类似于:
for (const char* p = text; *p != '\0'; ++p)
{
int c = (unsigned char) *p;
switch (c)
{
case '\\':
printf("\\\\");
break;
case '\n':
printf("\\n");
break;
case '\r':
printf("\\r");
break;
case '\t':
printf("\\t");
break;
// TODO: Add other C character escapes here. See:
// <https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences>
default:
if (isprint(c))
{
putchar(c);
}
else
{
printf("\\x%X", c);
}
break;
}
}
(注意我写了上面的答案,而问题仍然用C标记,我使用printf
,因为我发现它比通过C ++更简单(特别是出于演示目的)&#39 ; s iostream格式化机制。)
答案 1 :(得分:2)
\t
和\n
将分别打印一个标签(4个空格)和一个新行。
如果您想打印\t
和\n
作为输出。您必须在\
和\t
之前添加额外的\n
作为前缀。
std::string text("item \\t new_item \\n")
答案 2 :(得分:1)
C ++标准库没有直接支持转义字符串。
您可以直接实现它,但这会遇到三个问题:
对于ASCII的转义字符(代码27),存在非标准转义符,例如\e
,例如,克++
每个char
(CHAR_BIT
的{{1}})的位数,以及数字转义中必需的位数,取决于系统。
字符是否可打印,即是否需要转义,取决于区域设置。当前区域设置的竞争指标的数量进一步复杂化:C级全局区域设置,C ++级别全局区域设置,或者例如<limits.h>
中充满了语言环境?
有了一些硬连线选择,实现代码可能如下所示:
cout