C代码中的排列 - Java代码

时间:2016-09-18 09:42:23

标签: java c permutation porting

我有以下java代码用于打印字符串的所有排列。我试图将其转换为C代码。但是由于C不支持本机字符串,我在实现方面遇到了一些困难。

java代码如下:

import java.io.*;

class permute{

static void permuteString(String begin, String end){

        if(end.length() <= 1){
                System.out.println(begin+end);
        }
        else{
                for(int i=0; i<end.length(); i++){
                        String remainString = end.substring(0,i) + end.substring(i+1);
                        permuteString(begin + end.charAt(i), remainString);

                }
        }
}

public static void main(String args[])throws Exception{

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    String s = br.readLine();
    permuteString("",s);
}

}

我(不完整)尝试将其移植到C中如下: -

#include <stdio.h>
#include <string.h>

void permute(char* arr, int beginstart, int beginend, int endstart, int endend){

        if(endend-endstart <= 1){
                int i=0;
                for(i=beginstart; i<=beginend; i++){
                        printf("%c",arr[i]);
                }

                for(i=beginend; i<=endend; i++){
                        printf("%c",arr[i]);
                }
        }

        else{
                int i=0;
                for(i=0; i<=(endend-endstart); i++){
                    //HAVING ISSUES IN THIS PART 
                }
        }

}

int main(){

    char arr[3]={'a','b','c'};         
    permute(arr, 0,0,0,3);
    return 0;
}

我不清楚使用递归调用移植循环的最佳方法。在递归中使用动态字符串连接。我不知道如何用索引来表示它。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

如果您没有使用此示例实际学习C,则使用其他人编写的代码会更简单。谷歌搜索c permute string显示了一个非常好的算法,就地进行整个排列,所以你不必进行任何内存分配。

请参阅http://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/