У меня есть следующий код java для распечатки всех перестановок строки. Я пытаюсь преобразовать его в код C. Однако, поскольку C не поддерживает родные строки, у меня возникают некоторые трудности при реализации.Перестановка в C - порт кода java
код 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);
}
}
My (неполную) попытку порта это в 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;
}
Я не ясно, на лучший путь к порту цикл с рекурсивным вызовом. Существует динамическая конкатенация строк, которая используется в рекурсии. Я не уверен, как представить его в терминах индексов. Любая помощь приветствуется.
Мой Java является ржавый, но это не 'Строка remainString = end.substring (0, я) + end.substring (я + 1)' то же самое, как это 'Строка remainString = конец; '? – alk
@alk: Нет, поскольку Java использует полуоткрытые интервалы. Поэтому 'end.charAt (i)' не учитывается. Это имеет смысл, так как именно этот символ добавляется в конце. –