C++ 将 std::cin 中的字符串与外部 txt 文件中的字符串进行比较

C++ Compare string from std::cin with string from the external txt file

我注意到有一些类似的问题,但我找不到正确的答案。

我想比较两个字符串 - 第一个由用户提供,第二个写入外部 .txt 文件。我几乎不会注意到这个问题,因为 在 Windows 下一切正常 if 中的条件对于某些特定值是正确的,但在 Linux 中它不是(它正在编译,但没有给出正确的结果)。我想也许 cin 在 Linux 下添加了一些额外的字符(比如 \n 等)但是 size( ) 在两个字符串上是相同的值,因为它应该是。

我应该改变什么?

string firststr, secondstr;
fstream dFile;
dFile.open("dfile.txt", ios::in);
if(dFile.good())
{
while (!dFile.eof())
{    
dFile >> secondstr; //string from file 
}

cin >> firststr;

if(firststr==secondstr) cout <<"OK!";

好的! 显示在Windows下,而不是Linux下。 我也用过 getline(cin,firststr) - 但没有成功。

我需要一个在 Windows(我已经拥有)和 Linux 下都可以工作的代码。

我希望这两个字符串都是某些 class 的成员这一事实不会改变任何东西。

提前感谢任何解决方案。

如果您将文件从 Windows 机器复制到 Linux 机器,该文件可能包含 CR+LF 字符,在 Linux 上使用该文件时会出现问题.

假设文件的内容是:

abcd<CR><LF>

当您 运行 您在 Windows 中的代码时,它将选择 abcd 作为文件中的最后一个有效字符串。

当您 运行 您在 Linux 中的代码使用相同的文件时,它将选择一个空字符串作为文件中的最后一个有效字符串。

如果您清理文件以包含

abcd<LF>

它将在 Linux 上正常工作。

进一步改进建议:

while 循环更改为:

while (dFile >> secondstr)
{    
}

有关详细信息,请参阅 Why is iostream::eof inside a loop condition considered wrong?