【问题标题】:Checking two strings for equality with one input and other from file检查两个字符串与一个输入和另一个来自文件的相等性
【发布时间】:2016-05-22 08:36:03
【问题描述】:

The dictionary file

这是我的代码。这里 dict.txt 是链接文件。字符串搜索从包含字符串的向量(可能)初始化。我使用 getline 从文件中读取并将每一行存储在字符串 temp 中。现在的问题是,当我执行search == temp 时,输出为假,应该为真。我必须打印在字典文件中找到的字符串。因此,我从文件中提取每一行并进行比较,但相等性被某种错误或我在某处出现问题。

    ifstream infile("namenumdict.txt");
    string search="", temp="";
    int k=0;
    for(int i=0; i<possible.size(); i++)
    {
        search=possible[i];
        while(getline(infile, temp))
        {
            if(search==temp)
            {
                fout<<temp<<endl;
                k++;
            }

        }
    }

我通过调试检查了所有事情都运行良好。 searchtemp 正在初始化。

请让我知道这个问题。 谢谢

【问题讨论】:

  • 无关:您是否打算只搜索 possible[] 中的第一个条目?因为一旦你遇到一个不在文件中的字符串(从你上次停止之前的搜索的点开始,如果有的话),任何进一步的搜索都不会成功,因为infile 在 eof 处。
  • 是的,WhozCraig 是对的。将possible 循环移动到while (getline() ...) 循环内
  • @WhozCraig 是的!我是第一次尝试,所以没有考虑。谢谢。

标签: c++ file-io fstream ifstream


【解决方案1】:

有几个可能的陷阱。 Windows 以\r\n 结束行,但Linux 只是\n。如果您在 Linux 上运行它但使用来自 Windows 的文件,则该字符串将包含出现在 \n 之前的 \r。检查字符串末尾的\r 并将其删除。

另一种可能性是您将“WORD”与“word”进行比较。在比较之前处理两个字符串都小写(或两者都大写)。

过去的爆炸:\r\n 来自电传打字机的古老时代。他们必须执行回车 (\r) 才能回到行首,然后换行 (\n) 才能下降到新行。

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多