Cの文字列の長いリストに対してさまざまな機能を実行する必要があります。
char *list1[] = {"one","two","three", "four","five","six"};
最初は、単純なcar / cdr関数を実装しようとしていますが、しばらく経ち、Cでchar*[]のリストを管理する最良の方法を忘れています。cdrはchar*のリストの残りを返す必要があります。新たにmallocされた配列で。私の場合、それは「2」、「3」、「4」、「5」、「6」です。リストのサイズが不明なため、これが複雑になります。おそらく、リストの長さの構造体を使用する必要がありますか?
char **cdr(char *aList[]) {
/*
malloc space for n-1 char*
*/
return aList; // Return everything to test
}
他の関数を使用します。たとえば、2つの連続する母音を持つすべての単語のリスト、または10文字より長い単語を返します。文字列を変更したくはありません(つまり、文字列は不変です)。cdrなどの関数でメモリをmallocするので、結果を取得して他の関数に渡すときに、それを追跡する必要があります。とにかく、誰かが私を始めてくれるなら、それは大いにありがたいです。ありがとう。
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;
}