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?。
我注意到有一些类似的问题,但我找不到正确的答案。
我想比较两个字符串 - 第一个由用户提供,第二个写入外部 .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?。