我如何打印" \ n"显式地在c ++中的字符串中

时间:2015-04-29 03:36:48

标签: c++

嗨我在c ++中有一个未知的字符串,包含" \ n" " \吨"等等 说;

string unknown1=read_from_file();

如果unknown1 =" \ n \ t \ n \ t \ n \ n \ n \ n \ n&n"现在我要打印

"\n\t\n\t\n\n\n\n\n"
除了一堆空的空间之外,还有一个屏幕......我应该怎么做?记住我不知道什么是未知的......

要强调,我知道如果我们改变" \ n"我们可以明确地打印\ n进入" \ n"对于每一个这样的角色......但问题在于我不知道里面的内容是什么......它是从文件中读取的......

感谢您的回答,但我们还有其他问题:

回答的程序还有一个问题...假设我不知道文件中唯一可能的特殊字符是\ n或\ t ...可能有类似\ u的东西? \ l?我想我们不能用尽所有可能性吗?有没有内置的C ++函数只输出相应的字符?

4 个答案:

答案 0 :(得分:3)

\n\t是转义序列,但您可以通过在它们之前添加额外的\来打印它们,\\用于获取单个反斜杠。单个反斜杠意味着它是一个转义序列(如果它是有效的),但是两个反斜杠表示反斜杠字符,因此每当您需要输出反斜杠时,只需添加其中两个。

所以,如果你使用

string unknown1="\\n\\t\\n\\t\\n\\n\\n\\n\\n";

您将获得所需的输出。

如果您正在阅读文件,请执行此类操作

string unknown1="\n\t\n\t\n\n\n\n\n";
for ( int i = 0 ; i < unknown1.length() ; i++ )
{
    if( unknown1[i] == '\n')
      cout<<"\\n";
}

就像那样,您必须检查可能使用的每个escape sequence

答案 1 :(得分:1)

对您担心的不可打印字符运行特定检查。

char c;
while(c!=EOF){
    if(c=='\n')printf("\\n");
    if(c=='\t')printf("\\t");

    and so on and so forth.
    c = the next charater;
}
哎呀,我写的是C而不是C ++,但@Arun A.S的语法正确

答案 2 :(得分:1)

见下面的例子。您可以将自己的字符添加到switch以扩展它处理的字符。

#include <iostream>
#include <string>

std::string escapeSpecialChars(const std::string& str)
{
    std::string result;

    for(auto c : str)
    {
        switch(c)
        {
            case '\n':
                result += "\\n";
                break;

            case '\t':
                result += "\\t";
                break;

            default:
                result += c;
                break;
        }
    }

    return result;
}

int main()
{
    std::string str = "\n\n\n\t";

    std::cout << escapeSpecialChars(str);

    return 0;
}

答案 3 :(得分:0)

您可以使用std :: map创建自己的函数来打印字符:

void printChar( const char ch )
{
  static const std::map< char, std::string > char_map = {
    { '\n', "\\n" }
    // add mappings as needed
  };

  auto found = char_map.find( ch );
  if ( found != char_map.end() )
    std::cout << found->second;
  else
    std::cout << ch;
}

// usage
std::string str = "a\nbc";
for ( auto ch : str ) printChar ( ch );