我需要对 C 中的长字符串列表执行各种功能。
char *list1[] = {"one","two","three", "four","five","six"};
最初,我正在尝试实现简单的 car/cdr 函数,但是已经有一段时间了,我忘记了在 C 中管理 char *[] 列表的最佳方法。 cdr 应该返回 char * 列表的其余部分在一个新的 malloc'ed 数组中。就我而言,它是“二”、“三”、“四”、“五”、“六”。未知的列表大小使这一点复杂化。也许,我应该使用具有列表长度的结构?
char **cdr(char *aList[]) {
/*
malloc space for n-1 char*
*/
return aList; // Return everything to test
}
我将有其他功能,例如,返回具有两个连续元音的所有单词的列表,或者超过 10 个字符的单词。我永远不想更改字符串(即它们是不可变的)。我将在 cdr 之类的函数中分配内存,因此在获取结果并将它们传递给其他函数时,我需要跟踪它。无论如何,如果有人能让我开始,将不胜感激。谢谢。
char *list1[] = {"one","two","three", "four","five","six"}; // Short list
char **cdr(char *aList[]) {
/*
malloc space for n-1 char*
*/
return aList; // Return everything to test
}
char *car(char *aList[]) {
return aList[0];
}
int main() {
const char *first;
char *rest[];
int len = sizeof(list1)/sizeof(char*);
printf("list1 len=%d\n", len);
first = car(list1);
rest = cdr(list1);
printf("%s\n", first);
len = sizeof(rest)/sizeof(char*);
printf("rest len=%d\n", len);
return 0;
}