C - 确定每个组中数组元素的数量

时间:2016-10-06 14:25:32

标签: c arrays compare

我有一个我已排序的字符串数组,例如{case,case,case,control,control};

我在数组上迭代,在第i个元素和第i个+ 1个元素之间的任何时间递增str!= 0来确定数组中不同组的数量,在这种情况下为2.但是,我&#39 ;我想知道是否有人对如何确定每组中的元素数量有任何建议(如果你事先不知道会有多少不同的组)。

提前致谢!

编辑,根据@Riley的建议,我增加了一个数组class_size,类号作为索引。当我在第一个for循环中包含这个增量作为第二个if条件时(当循环完成时为每个索引加1),它实际上工作得很好。但是,在我知道n_classes是什么之前,我无法弄清楚如何确定class_size数组的大小,所以我把它作为一个单独的循环,但它似乎并没有起作用。似乎问题在于我无法初始化一个可变大小的对象(class_size [n_classes]),但如果我事先不知道有多少,我不知道怎么解决这个问题。课程将有:

int n_classes = 1;
for(int i = 0; i < total_columns - 1; i++)
{
    if(strcasecmp(data[i].c_name, data[i+1].c_name) != 0)
    {
        n_classes++;
    }
}

int n_classtemp = 0;
int class_size[n_classes];
for(int i = 0; i < total_columns - 1; i++)
{
    if(strcasecmp(data[i].c_name, data[i+1].c_name) != 0)
    {
        n_classtemp++;
    }
    if(strcasecmp(data[i].c_name, data[i+1].c_name) == 0)
    {
        class_size[n_classtemp]++;
    }
}

for (int i = 0; i < n_classes; i++)
{
    class_size[i] = class_size[i] + 1;
}

编辑: 我能够通过手动初始化数组来解决这个问题:

int n_classes = 1;
for(int i = 0; i < total_columns - 1; i++)
{
    if(strcasecmp(data[i].c_name, data[i+1].c_name) != 0)
    {
        n_classes++;
    }
}

int n_classtemp = 0;
int class_size[n_classes];
memset(class_size, 0, n_classes*sizeof(int));
for(int i = 0; i < total_columns - 1; i++)
{
    if(strcasecmp(data[i].c_name, data[i+1].c_name) != 0)
    {
        n_classtemp++;
    }
    if(strcasecmp(data[i].c_name, data[i+1].c_name) == 0)
    {
        class_size[n_classtemp]++;
    }
}

for (int i = 0; i < n_classes; i++)
{
    class_size[i] = class_size[i] + 1;
}

0 个答案:

没有答案