在两行上打印类似"FirstnSecond"的字符串

Print a string like "First Second" on two lines

本文关键字:First nSecond 字符串 打印 两行      更新时间:2023-10-16

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

 First
 Second

问题:如果字符串是在代码中定义的,如在line = "FirstnSecond";中,那么它打印在两行上;如果我从文件中读取它,则打印为

FirstnSecond

说明问题的简短程序:

#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 = "FirstnSecond";
  std::cout << line << std::endl ;
  return;
}

参数.par 文件仅包含以下行

FirstnSecond

Win32 控制台输出为

C:blabla>SOtest.exe
FirstnSecond
First
Second

有什么建议吗?

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

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

您必须提供如下所示的替换函数:将字符串的一部分替换为另一个字符串(标准C++本身不提供此类替换函数。

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

  • \t -> [制表符]
  • \" -> "(与普通 " 区分开来,它标记字符串文字的结尾,但不是字符串本身的一部分!
  • \
  • \ -> \ (允许在字符串文本中使用反斜杠;单个反斜杠启动转义序列)

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

当你认为你在分配FirstnSecond时,你不是。在源代码中,字符串文本中的n是不可见换行符的"快捷方式"。字符串不包含n - 它包含换行符。它会自动为您转换。

而您从文件中读取的是实际字符n