我会编写一个函数,它以一种递归的方式详细说明一个结构并返回一个字符数组的长度,该字符数组在同一个结构中定义。 结构是:
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,但我认为它不会增加。我该如何解决这个问题?
答案 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);
}