打印两行“First \ Second”之类的字符串

时间:2015-01-23 16:12:19

标签: c++ visual-studio-2008

目标:从文件中读取First\nSecond形式的字符串并将其打印为

 First
 Second

问题:如果字符串是在代码中定义的,就像在line = "First\nSecond";中一样,那么它会打印在两行上;如果相反我从文件中读取它然后打印为

First\nSecond

说明问题的简短程序:

#include "stdafx.h"     // I'm using Visual Studio 2008
#include <fstream>
#include <string>
#include <iostream>

void main() {
  std::ifstream ParameterFile( "parameters.par" ) ;
  std::string line ;
  getline (ParameterFile, line) ;
  std::cout << line << std::endl ;
  line = "First\nSecond";
  std::cout << line << std::endl ;

  return;
}

parameters.par文件只包含行

First\nSecond

Win32控制台输出

C:\blabla>SOtest.exe
First\nSecond
First
Second

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

在C / C ++字符串文字(“...”)中,反斜杠用于标记特殊字符的所谓“转义序列”。 编译器 转换(替换)两个字符'\'(ASCII码92),后跟'n'(ASCII码110)换行符(ASCII码) 10)。在文本文件中,通常只需按[RETURN]键即可插入换行符。如果你真的需要处理包含两个字符'\'和'n'的输入并希望像C / C ++编译器一样处理它们,那么你必须用换行符明确地替换它们:

replace(line, "\\n", "\n");

你必须提供这样的替换函数: Replace part of a string with another string(标准C ++本身不提供这样的替换功能。)

C / C ++和类似编译器支持的其他转义序列:

  • \ t - &gt; [TAB]
  • \“ - &gt;”(用于区分普通“,它标记字符串文字的结尾,但不是字符串本身的一部分!)
  • \\ - &gt; \(允许在字符串文字中使用反斜杠;单个反斜杠启动转义序列)

答案 1 :(得分:2)

转义序列\n在字符串文字中指示的字符与看起来像\n的字符序列不同!

如果您认为自己正在分配First\nSecond,则不是。在源代码中,字符串文字中的\n是不可见换行符的“快捷方式”。该字符串不包含\n - 它包含换行符。它会自动为您转换。

您从文件中读取的内容是实际字符\n