【问题标题】:C++ Compare string from std::cin with string from the external txt fileC++ 将 std::cin 中的字符串与外部 txt 文件中的字符串进行比较
【发布时间】:2016-01-12 17:19:48
【问题描述】:

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

我想比较两个字符串 - 第一个由用户给出,第二个写入外部 .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 下都可以工作。

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

提前感谢任何解决方案。

【问题讨论】:

标签: c++ linux string compare cin


【解决方案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?

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 2022-01-06
    • 2020-04-15
    • 1970-01-01
    • 2014-11-08
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多