C 中字符串集的排列

Permutations of set of strings in C

提问人:Hermann 提问时间:9/3/2022 更新时间:9/3/2022 访问量:54

问:

我想编写一个 C 程序来打印出 k 长度的排列。我是 C 的新手。我可以像这样用 Java 来做,

    public static void main(String[] args) {
        ArrayList<String> dict = new ArrayList<>();
        dict.add("cat");
        dict.add("tag");
        dict.add("got");
        dict.add("get");
        dict.add("tog");
        int k = 3;
        helper(k, dict, new ArrayList<String>());
    }

    public static void helper(int k, ArrayList<String> dict, ArrayList<String> seq) {
        if (seq.size() == k) {
            System.out.println(seq);
            return;
        }
        for (int i = 0; i < dict.size(); i++) {
            seq.add(dict.get(i));
            helper(k, dict, seq);
            seq.remove(dict.get(i));
        }
    }

但是,我在 C 中遇到麻烦,具体来说,我不知道如何将字符串数组传递给我的帮助程序功能。

#include <stdio.h>

void sequence(int k, char *seq[], char[] **dic){
    // base case
    int num = sizeof(seq) / sizeof(seq[0]);
    if(num == k){
        //print
        //return
    }
    for(int i = 0; i < k; i++){
       //recurse 
    }
}

int main() {
    char* dict[5][10] = {"cat", "dog", "got", "get", "tog"};
    char* seq[5][10] = {"", "", "", "", "", ""};
    int k = 3;
    sequence(k, *seq, **dict) 
    return 0;
}
数组 C char 参数传递 引用

评论

3赞 Some programmer dude 9/3/2022
定义应为 (不是没有指针) 或 。与 相同。char* dict[5][10]char dict[5][10]const char* dict[5]seq
1赞 Some programmer dude 9/3/2022
另请注意,一旦将数组传递给函数,它就会衰减为指向其第一个元素的指针。作为一个参数,声明实际上与 相同。指针的大小是指针本身的大小,而不是指针可能指向的大小。始终将数组的实际大小作为参数传递。char *seq[]char **seq
0赞 Hermann 9/10/2022
@JamesRisner什么意思?

答: 暂无答案