如何通过递归访问结构的某个元素

时间:2016-04-30 13:29:14

标签: c arrays recursion struct

我会编写一个函数,它以一种递归的方式详细说明一个结构并返回一个字符数组的长度,该字符数组在同一个结构中定义。 结构是:

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传递给我的函数?我知道我的代码是错误的,但是如果我想计算,我必须增加变量i,但我认为它不会增加。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

如果我解释正确,这段代码应该做你想要的:

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)正确完成。

答案 1 :(得分:0)

我必须写一个函数int length(BinSeq * bin_seq),它递归计算二进制序列bin_seq的长度。结构是:

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传递给函数,我如何计算数据长度?

答案 2 :(得分:0)

像这样:

#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;
}

使用辅助递归函数

int aux_length(const char *data){
    if(*data == '0' || *data == '1')
         return 1 + aux_length(data + 1);

    return 0;
}

int length(BinSeq* bin_seq) {
    return aux_length(bin_seq->data);
}