C++ 比较字符串在mingw和ubuntugcc上的行为不同

C++ 比较字符串在mingw和ubuntugcc上的行为不同,c++,windows,string,ubuntu,C++,Windows,String,Ubuntu,我试图比较两个字符串。这是我的代码 string line; getline(cin, line); if(line.compare("% Input alphabet")==0) dosomething; 问题是,当在windows机器上使用mingw时,以下代码正常工作,但当我在ubuntu vm上运行相同的代码时,它不会执行dosomething方法。我编译了我的程序并运行了以下命令 在窗户上 a、 exe

我试图比较两个字符串。这是我的代码

string line;
getline(cin, line);
if(line.compare("% Input alphabet")==0)
dosomething;
问题是,当在windows机器上使用mingw时,以下代码正常工作,但当我在ubuntu vm上运行相同的代码时,它不会执行dosomething方法。我编译了我的程序并运行了以下命令

在窗户上

a、 exe 在Ubuntu上

./a.out
我建议在末尾修剪
\r\n
符号。这是Windows(\r\n)和Unix(\n)之间的唯一区别


使用
boost::trim()
来执行此操作

您使用的文件是否与在Windows上创建并传输到Linux机器的文件完全相同?如果是,那么这可能会导致您描述的问题

<> P>的思想是C++流根据平台不同地处理行结束字符(如果你不以二进制模式打开流)。这行代码:

someTextFileStream << "some text\n";
如果在Windows上使用
getline()
阅读此内容,则
getline()
填充的字符串将包含
一些在Windows上写入的文本

如果您在Linux上完全像这样传输此文件(因此它是与Windows文件相同的二进制文件),然后再次使用
getline()
读取它,则字符串实际上将包含
在Windows上写入的一些文本\r
。这是因为在Linux上,新的行分隔符是
\n
,因此
getline()
在该行上停止


可能的解决方案:从文件中读取行后修剪行;检测行尾分隔符,并在代码中适当转换/处理它;在创建文件时,为代码运行的平台使用适当的行尾。

我怀疑这与行尾有关(NL+CR vs NL)。您能否提供一个小的“input.txt”示例来给出这些不同的结果?
some text written on Windows\r\n