打印带有特殊字符的字符串变量

新手上路,请多包涵

当我想对字符串中的特殊字符进行特殊处理时,我应该使用“\”:

 std::string text("item \t new_item\n")

但是,如果我打印这个字符串,显然,它会打印:

 item      new_item

有没有办法设置 std::cout 来打印所有特殊字符:

 item \t new_item \n

原文由 rph 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 862
2 个回答

没有内置的方法可以做到这一点。您将需要手动转义字符。例如,在 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++ 的 iostream 格式化机制更简单(尤其是用于演示目的)。)

原文由 jamesdlin 发布,翻译遵循 CC BY-SA 3.0 许可协议

\t\n 将分别打印一个制表符(4 个空格)和一个新行。

如果要打印 \t\n 作为输出。您必须在 \t\n 之前添加一个额外的 \ 作为前缀。

 std::string text("item \\t new_item \\n")

原文由 Shravan40 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题