1つの単語のすべての可能な組み合わせを置換する関数を作成しようとしていますが、プログラムが置換文字列の複製を作成してしまいます。固定文字列が期待通りに機能しない
この私の作業コードです:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char arr[5000] = {0};
void swap (char *x, char *y);
void permute(char *ptr, size_t i, size_t n);
int main(void){
char str[80] = "MICHI";
size_t len = strlen(str);
permute(str, 0, len);
printf("%s\n", arr);
printf("END\n");
}
void swap (char *x, char *y){
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permute(char *ptr, size_t i, size_t n){
size_t j;
if (i == n){
strcat (arr, ptr);
strcat (arr, "\n");
}else{
for (j = i; j <= n; j++)
{
swap((ptr + i), (ptr + j));
permute(ptr, i+1, n);
swap((ptr + i), (ptr + j));
}
}
}
そして、ここでは、出力されます。
ABC
AB
ACB
AC
A
A
BAC
BA
BCA
BC
B
B
CBA
CB
CAB
CA
C
C
END
期待される成果は次のようになります。
ABC
AB
ACB
AC
A
BAC
BA
BCA
BC
B
CBA
CB
CAB
CA
c
プログラムは、重複の多くを作成し、 2つ目のNew Linesも作成します。関数はpermuteで
IMCHI
IMCH
IMCIH
IMCI
[小さなプログラムをデバッグする方法](https://ericlippert.com/2014/03/05/how- to-debug-small-programs /) – alk
注文には問題がありますか? – klutt
MICHIの2つの「I」のように、入力に重複した文字が含まれている場合は、重複する置換が必要です。あなたが並べ替えると、2つの「私」は異なるエンティティとみなされます。あるいは、組み合わせ(つまり、ユニークな順列)を欲しいだけですか? –