在文件中查找重复数字(C ++)

时间:2017-03-21 02:49:44

标签: c++

我已经看了一会儿,但我仍然坚持一点逻辑。

我有一个包含生日列表的文件。我想找到最常见的生日(月/日)。

到目前为止我的逻辑:

    int maxValue = 0;

    int maxBday;

    while (Bday >> month >> b >> day >> b >> year) // take in values a line at a time from the file

    {
        int a = totalDays(month, day); //function finds number of days into the year 
        //(i.e. Feb. 2 = 33, not considering leap years in this problem). 

        for (int i = 0; i < 365; i++)
        {
            if (i = a) //going through all 365 days until the number of days matches
            {
                bdays[i]++; //add one to the array at position i

                if (bdays[i] > maxValue) //finding what the maximum value in the array is
                {
                    maxBday = i; //max number of days
                    maxValue = bdays[i]; //Setting new max for next line
                }
            }
        }
     }
     cout << "The most common birthday: " << maxBday; 
}

我稍后会创建一个函数,将以后的总天数转换为实际日期。

我的文件在1/1上有一个重复的日期,所以输出应该是1年1天,但我没有得到任何输出。我已经输入了cout语句,并且正在触及函数的每个部分,但循环永远不会结束。我真的迷失了我的逻辑错误。

2 个答案:

答案 0 :(得分:1)

if(i == a)

因为否则程序会将i设置为a的值。它可能不是整个解决方案。

答案 1 :(得分:1)

寻找最常见的生日:

  1. 使用multiset。
  2. 将每个生日存放在套装中。
  3. 找到具有最大#include <multiset> #include <tuple> struct Birthday { int d; int m; int y; } bool operator<(Birthday const & lhs, Birthday const & rhs) { return std::tie(lhs.d, lhs.m, lhs.y) < std::tie(rhs.d, rhs.m, rhs.y); } multiset<Birthday> birthdays; //loop and insert birthdays with birthdays.insert(Birthday{...}); auto maxIt = std::max_element(begin(birthdays), end(birthdays), [](Birthday const & b, Birthday const & b2) { return b.count() > b2.count() });
  4. 的生日

    像这样(未经测试):

    {{1}}

    未经测试,但您应该明白这一点。