gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:07 25 4
gpt4 key购买 nike

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

我想比较两个字符串 - 第一个由用户提供,第二个写入外部 .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 下都能工作的代码。

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

提前感谢任何解决方案。

最佳答案

如果您将文件从 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?了解更多详情。

关于C++ 将来自 std::cin 的字符串与来自外部 txt 文件的字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34749951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com