我有一个我已排序的字符串数组,例如{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;
}