目标:从文件中读取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
有什么建议吗?
答案 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 ++和类似编译器支持的其他转义序列:
答案 1 :(得分:2)
转义序列\n
在字符串文字中指示的字符与看起来像\n
的字符序列不同!
如果您认为自己正在分配First\nSecond
,则不是。在源代码中,字符串文字中的\n
是不可见换行符的“快捷方式”。该字符串不包含\n
- 它包含换行符。它会自动为您转换。
您从文件中读取的内容是实际字符\
和n
。