C 如何使用递归访问结构的某些元素
我将编写一个函数,详细说明一个结构并返回字符数组的长度,即以递归方式在同一个结构中定义。 结构是:C 如何使用递归访问结构的某些元素,c,arrays,recursion,struct,C,Arrays,Recursion,Struct,我将编写一个函数,详细说明一个结构并返回字符数组的长度,即以递归方式在同一个结构中定义。 结构是: typedef struct BinSeq { char* data; int dimension; }BinSeq typedef struct BinSeq { char* data; int dimension; }BinSeq 数据(字符数组)只能有两种类型的字符:“0”和“1”,而维度是数组的
typedef struct BinSeq {
char* data;
int dimension;
}BinSeq
typedef struct BinSeq {
char* data;
int dimension;
}BinSeq
数据(字符数组)只能有两种类型的字符:“0”和“1”,而维度是数组的长度,但不是“0”和“1”的序列。
所以我试着写这个函数:
int length(BinSeq* bin_seq) {
int i;
if(bin_seq->data[i] == '0' || bin_seq->data[i] == '1')
{
i++;
return 1 + length(bin_seq->data[i]);
}else
return 0;
}
但我可能对此有所怀疑。第一个原因是编译器说:
warning: passing argument 1 of ‘length’ makes pointer from integer without a cast [enabled by default]
return 1 + length(bin_seq->data[i]);
^
recursion.c:13:6: note: expected ‘struct BinSeq *’ but argument is of type ‘char’
int length(BinSeq* bin_seq) {
如果我必须将Binseq*bin_seq传递给我的函数,我如何处理数据?我知道我的代码在这方面是错误的,但是如果我想计算leght,我必须增加变量I,但我认为它不会增加。如何处理此问题?如果我的解释正确,此代码应能满足您的要求:
int length(BinSeq* bin_seq, int i) {
if(bin_seq->data[i] == '0' || bin_seq->data[i] == '1')
{
return 1 + length(bin_seq->data, ++i);
} else {
return 0;
}
}
尽管有更有效的编码方法:实际上,您可以简单地使用指针算法在
char
数组上循环,直到找到除0或1以外的任何值。您还没有显示如何初始化序列;我们可以假设它是使用已知的终止符字符(例如,\0
)正确完成的。我必须编写一个函数int length(BinSeq*bin_seq),递归计算二进制序列bin_seq的长度。结构是:
typedef struct BinSeq {
char* data;
int dimension;
}BinSeq
typedef struct BinSeq {
char* data;
int dimension;
}BinSeq
主要是:
int main(int argc, char** argv) {
Binseq* binary;
binary.data = "0000110111";
binary.dimension = 2014;
int dimension_of_array = length(BinSeq* bin_seq);
}
如果必须将bin_seq传递给函数,如何计算数据长度?如下所示:
#include <stdio.h>
typedef struct BinSeq {
char *data;
int dimension;
} BinSeq;
int length(BinSeq* bin_seq) {
if(*bin_seq->data == '0' || *bin_seq->data == '1')
return 1 + length(&(BinSeq){bin_seq->data + 1, bin_seq->dimension});
return 0;
}
int main(int argc, char** argv) {
BinSeq binary;
binary.data = "0000110111";
binary.dimension = 2014;
int dimension_of_array = length(&binary);
printf("%d\n", dimension_of_array);
return 0;
}
您使用未初始化变量的值调用了未定义的行为,该变量具有不确定的自动存储持续时间
i
。很抱歉,我无法清楚地获取您想要的内容BinSeq
似乎没有指向下一个节点的指针。@MikeCat如果必须传递到函数bin_seq,即BinSeq类型,我如何处理数组数据?在结构中没有递归,编译器应该警告该代码。正如许多初学者所认为的那样,它们是不容忽视的。你的问题不清楚。很抱歉,如果我以一种不好的方式暴露了这个问题,我必须在那里做一些经验。我必须用这个协议编写这个函数:int lengh(BinSeq*bin_seq)。可能我不得不重新表述我的问题,不清楚。这样的递归非常浪费。因此,首先我必须记住,我正在使用由我创建的Binseq类型的指针。然后要在Binseq中“输入”,我必须使用您在那里使用的Sintax&(BinSeq){bin_seq->data+1,bin_seq->dimension}?或者我可以用另一种方法吗?@MicheleColuccelli您可以使用局部变量而不是&(BinSeq){bin_-seq->data+1,bin_-seq->dimension}
。例如BinSeq温度;temp.data=bin_seq->data+1;温度尺寸=料仓顺序->尺寸代码><代码>返回1+长度和温度谢谢,但我更喜欢第一个。这似乎只是一种冗余……需要复制,因为无法更改原始文件。顺便说一句,温度尺寸=料仓顺序->尺寸代码>实际上不需要。因为它不使用。你应该编辑你的问题,而不是在“答案”中问另一个问题,主要是因为其他人很难跟上对话。我将编辑我的答案,以解决这一澄清。