增加嵌套数组 - 包含日期信息

时间:2014-10-16 05:59:32

标签: c arrays for-loop nested nested-loops

我有三个整数数组。 SIZE是365.

double month[SIZE], day[SIZE];
int countMonths[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

在Month数组中,我想填充月份的int值 - 前31个字段将为1,接下来的28个字段将为2,等等。对于该月的天数。

月[0-31]的值为1(对应于第1个月) 月[32-60]将是值2(对应于第2个月)

我的循环不起作用。外部循环将循环遍历数组中的365个项目。我希望内循环循环数量 - 对应于countMonths [1]等中的值;

for (int i = 0; i < SIZE; i++)
    for(int j = 1; j < countMonths[j]; j++)
        month[i] = i+1;

第二个查询我想要做的是使用相同的countMonths内部循环只是更新而不是将所有值1(对应的第1个月)。它会将1,2,3等放到31,然后再从1开始。

for (int i = 0; i < SIZE; i++)
    for(int j = 1; j < countMonths[j]; j++)
        day[i] = j;

两个查询都没有做我想做的事情......请指教。 使用以下逻辑,我似乎更新并循环每个月的第一天。

int i = 0;
int currentmonth = 0;
int currentday = 1;
while(i < SIZE &&  i < countMonths[currentmonth])
{
    month[i] = currentmonth+1;
    day[i] = currentday;
    i++;
    currentday++;

if(currentday > countMonths[currentmonth]);
   {
    currentmonth++;
    currentday = 1;
   }
}

3 个答案:

答案 0 :(得分:1)

你正在使用带有2个循环的2个索引,当在1个循环中使用3个索引会更有用:

currentDay = currentMonth = 1
while(destinationIndex and currentMonth are valid indexes)
    assign current day and month to destination arrays
    increment destinationIndex and currentDay
    if(currentDay is greater than possible for currentMonth)
        increment currentMonth
        set currentDay back to 1

答案 1 :(得分:1)

我的解决方案:

int dayInYear = 0;

for (int month = 0; month < 12; ++month)
{
    for (int dayInMonth = 0; dayInMonth < countMonths[month]; ++dayInMonth)
    {
        month[dayInYear] = dayInYear + 1;
        ++dayInYear;
    }
}

与问题中的原始(非工作)解决方案非常相似,但仍然完全不同。

答案 2 :(得分:0)

这是你想要的吗?

#include "assert.h"

以后

    double month[SIZE], day[SIZE];
    int countMonths[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int iDayOfYear;
    int iCountMonth;
    int iDayOfMonth;

    for (iDayOfYear = 0, iCountMonth = 0; iCountMonth < sizeof(countMonths)/sizeof(countMonths[0]); iCountMonth++)
        for (iDayOfMonth = 0; iDayOfMonth < countMonths[iCountMonth]; iDayOfMonth++)
        {
            assert(iDayOfYear < sizeof(month)/sizeof(month[0]));
            month[iDayOfYear++] = iCountMonth+1;
        }           
    assert(iDayOfYear == sizeof(month)/sizeof(month[0]));

    for (iDayOfYear = 0, iCountMonth = 0; iCountMonth < sizeof(countMonths)/sizeof(countMonths[0]); iCountMonth++)
        for (iDayOfMonth = 0; iDayOfMonth < countMonths[iCountMonth]; iDayOfMonth++)
        {
            assert(iDayOfYear < sizeof(day)/sizeof(day[0]));
            day[iDayOfYear++] = iDayOfMonth;
        }
    assert(iDayOfYear == sizeof(day)/sizeof(day[0]));

这个想法是循环查看一年中的月份,并且每个月都会循环显示当月的日期 - 但保持一年中的整个日期计数器以填充month和{{1}数组。

我正在使用C standard library header "assert.h"来确保我不会溢出数组边界,并且每个数组都已完全初始化。