在C语言中从多维数组中提取一行
好吧,看来我的问题写得不够好,所以让我们再来一次: 我正在尝试编写一个函数,它将接受一个多维数组int和另一个int的参数: int-ListNum(int-tab[]],int-n)。在C语言中从多维数组中提取一行,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,好吧,看来我的问题写得不够好,所以让我们再来一次: 我正在尝试编写一个函数,它将接受一个多维数组int和另一个int的参数: int-ListNum(int-tab[]],int-n)。此函数的目标是获取所述数组并提取第一行,然后返回其元素列表(不带重复项),正如您可能猜到的那样,“int-tab[][]”是我们的数组,“int-n”是一行的大小,我只需要提取数组的第一行,所以我猜这就是我在参数中需要的所有信息 下面是一个它应该如何工作的示例:这是我们的数组-> 表[7][2]: |1 | 3
此函数的目标是获取所述数组并提取第一行,然后返回其元素列表(不带重复项),正如您可能猜到的那样,“int-tab[][]”是我们的数组,“int-n”是一行的大小,我只需要提取数组的第一行,所以我猜这就是我在参数中需要的所有信息
下面是一个它应该如何工作的示例:这是我们的数组-> 表[7][2]:
|1 | 3 | 1 | 2 | 0 | 2 | 2 |
|2 | 1 | 1 | 0 | 2 | 3 | 结果将是一个新数组,如下所示:|1 | 3 | 2 | 0|
现在我的问题是我不太擅长编码,我大致知道我应该做什么,但我仍然没有找到正确的解决方案。以下是我到目前为止所做的:
int listNum(int tab[][], int n){
int i, j, v=0, temp, *x;
x=malloc(n*sizeof(int));
if(x==NULL){
printf("Error allocation memory !\n");
return -1;
}
x[0]=tab[0][0];
for(i=0;i<n;i++){
temp=tab[i][0];
for(j=0;j<n;j++){
if (temp==x[j]){
i++;
break;
}
}
x[v+1]=tab[i][0];
}
return x;
}
int-listNum(int-tab[][],int-n){
int i,j,v=0,温度,*x;
x=malloc(n*sizeof(int));
如果(x==NULL){
printf(“错误分配内存!\n”);
返回-1;
}
x[0]=制表符[0][0];
对于(i=0;iCatch!:)
事后陈述
*b=malloc(count*sizeof(int))
在函数中,可以插入支票
if ( *b != NULL )
{
//...
}
虽然我没有理解你的问题,但我理解的是“你只需要打印多维数组的第一行……值不应该重复……”
您没有告诉我您是从用户还是从文件中读取MDarray
如果每次都是用户发来的..不要在第一位重复..在行中只存储一个值一次.然后打印一个[0][i]简单
如果来自文件,请输入代码
firstline()
{
for(i=0;i<n;i++) if(a[0][i]!='\O')
{
printf("\t%c",a[0][i];
for(j=i;j<n;j++)
if(a[0][i]==a[0][j])
a[0][j]= '\0' ;
}
}
firstline()
{
对于(i=0;iint行[选项卡行的大小]=tab[0]请编辑问题,将所有相关信息包括在内,如预期和实际输出。不要在评论中添加这样的重要信息。是的,我知道,我的代码即将发布,我只是发现现在启动Linux虚拟机时遇到了一些问题,我想我可以随时提出这个问题,看看在我发布之前是否有人可以提供任何帮助把我的手放在代码上。对此很抱歉。@JoachimPileborg是的,mb,我是新来的,没有看到编辑按钮,所以我觉得它有点像9gag,发布后你就不能编辑了(尽管现在我想起来了,那会很糟糕!:x)@dx3d,你应该在@ArunA上阅读此信息和其他信息。感谢链接,我已经尝试重做了,希望我没有忘记任何事情。我想你应该理解数组作为函数参数是应该避免使用的,因为这样的东西会自动“调整”到指针,这样会造成混乱。建议在“listNum”参数列表中将“int tab[][]”重新写入为“int(*tab)[]“为了更好地显示实际类型。我投了反对票,因为你使用数组作为函数参数,这是有史以来最误导人的事情。考虑用指针来代替它。@VladfromMoscow我很抱歉同意FISOCPP…只要用指针作为参数就行了。我尽量保持简短,这是去年在我们的操作系统cou中进行的考试。”rse,基本上第一个问题是生成一个函数,该函数将采用2D数组(该数组应该是一个文件系统,第一行是文件编号,第二行是数据块)然后只提取文件编号,这样我们就可以使用这个函数来帮助我们制作另一个,它会显示阵列是否碎片化。我试图解释它,这样我就不会因为所有细节而打扰每个人,只需要回答我的问题。
if ( *b != NULL )
{
//...
}
firstline()
{
for(i=0;i<n;i++) if(a[0][i]!='\O')
{
printf("\t%c",a[0][i];
for(j=i;j<n;j++)
if(a[0][i]==a[0][j])
a[0][j]= '\0' ;
}
}
x [ 0 ] = t a b [ 0 ] [ 0 ] ;
f o r ( i = 0 ; i < n ; i + + )
{ t emp = t a b [ i ] [ 0 ] ; /* Ti0 is the
column... it should be T[0][i] for 1st row*/
f o r ( j = 0 ; j < n ; j + + )
{ i f ( t emp = = x [ j ] )
{ i + + ; b r e a k ; } }
x [ v + 1 ] = t a b [ i ] [ 0 ] ; //tab[0][i]