在两行上打印类似 "First\nSecond" 的字符串
Print a string like "First\nSecond" on two lines
目标: 从文件中读取 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
有什么建议吗?
在 C/C++ 字符串文字 ("...") 中,反斜杠用于标记所谓的 "escape sequences" 特殊字符。 编译器 翻译(替换)两个字符'\'(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 -> [TAB]
- \" -> "(以区别于普通的 ",后者标记字符串文字的结尾,但不是字符串本身的一部分!)
- \\ -> \(允许在字符串文字中使用反斜杠;单个反斜杠开始转义序列)
转义序列 \n
在字符串文字中指示的字符与看起来像 \n
!
的字符序列不同
当您认为自己正在分配 First\nSecond
时,您并不是。在您的源代码中,字符串文字中的 \n
是不可见换行符的 "shortcut" 。该字符串不包含 \n
- 它包含换行符。它会自动为您转换。
而您从文件中读取的是实际字符 \
和 n
。
目标: 从文件中读取 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
有什么建议吗?
在 C/C++ 字符串文字 ("...") 中,反斜杠用于标记所谓的 "escape sequences" 特殊字符。 编译器 翻译(替换)两个字符'\'(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 -> [TAB]
- \" -> "(以区别于普通的 ",后者标记字符串文字的结尾,但不是字符串本身的一部分!)
- \\ -> \(允许在字符串文字中使用反斜杠;单个反斜杠开始转义序列)
转义序列 \n
在字符串文字中指示的字符与看起来像 \n
!
当您认为自己正在分配 First\nSecond
时,您并不是。在您的源代码中,字符串文字中的 \n
是不可见换行符的 "shortcut" 。该字符串不包含 \n
- 它包含换行符。它会自动为您转换。
而您从文件中读取的是实际字符 \
和 n
。