我正在尝试实现一个功能
int array(char *str, int length)
调用字符数组,并仅将特定元素复制到另一个数组上,该数组的长度必须与原始str
数组的长度相同。
但是这个函数需要递归,我没有办法声明这个'复制'数组,
因为我做了
char copied(length);
在函数内部,
当函数递归调用自身时,每次运行都会重置数组。
我限制了另一个以长度为变量的函数,所以这不是一种方法。
struct variables {
int counter;
char bra[500];
int maxb;
int findtheking[500];
int numoright;
};
struct variables mat = { 0, '\0', 0 , 0, 0 };
int matches(char* str, int len) {
if (mat.counter >= strlen(str)) {
if (mat.bra[strlen(str)-1] == '(') {
mat.counter = 0;
mat.bra[0] = '\0';
return 0;
}
else if (mat.bra[strlen(str)-1] == '0') {
mat.counter = 0;
mat.bra[0] = '\0';
return 1;
}
}
else {
if (str[mat.counter] == '(') {
mat.bra[len-1] = str[mat.counter];
mat.counter++;
matches(str, len - 1);
}
else if (str[mat.counter] == ')') {
if (mat.bra[len] == '(') {
mat.counter++;
mat.bra[len] = '0';
matches(str, len + 1);
}
else {
mat.counter = 0;
mat.bra[0] = '\0';
return 0;
}
}
else {
mat.counter++;
matches(str, len);
}
}
}
这是我为CS HW制作的功能,已经完成并提交。
它接受一串字符,并检查括号是否正确匹配。
此代码位于func.c中,并从main.c获取str。
为了解决这个问题,我使用这个函数在字符串中找到括号,如果找到'(',则函数将它放在一个名为mat.bra的数组中,我将其设置为500,因为我找不到一种使mat.bra具有'len'大小的方法。
此代码不适用于超过500个元素的字符串,所以我想知道是否有办法使mat.bra size'len'不用担心str上的字符总数。