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

时间:2016-01-12 17:19:49

标签: c++ linux string compare cin

我注意到有些问题类似,但我找不到合适的答案。

我想比较两个字符串 - 首先由用户给出,第二个用外部.txt文件写。我几乎不会注意到这个问题,因为Windows下的一切正常中的条件对于某些特定值是真的,但是在Linux中它不是' t(它正在编译,但没有给出正确的结果)。我想也许 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!";

OK! 显示在Windows 下,而不是在Linux下。 我还使用了getline(cin,firststr) - 没有成功。

我需要在Windows(我已经拥有)和Linux下运行代码。

我希望这两个字符串都是某些类的成员并不能改变任何东西。

提前感谢任何解决方案。

1 个答案:

答案 0 :(得分:1)

如果您将文件从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?