gpt4 book ai didi

C 中的 Char 置换算法,将输出存储在数组中

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:53 25 4
gpt4 key购买 nike

我需要在 C 中存储四个字母的排列我试图使用这个算法,但不知道如何将输出存储在某个数组中如果有人可以为我更正此问题或提供另一种算法,我将不胜感激

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


void swap(char* x, char* y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}


void permute(char* a, int l, int r)
{
int i;
if (l == r)
printf("%s\n", a);
else {
for (i = l; i <= r; i++) {
swap((a + l), (a + i));
permute(a, l + 1, r);
swap((a + l), (a + i)); // backtrack
}
}
}

int main()
{
char str[] = "AGTC";
int n = strlen(str);
permute(str, 0, n - 1);
return 0;
}

最佳答案

您应该注意到,您将需要相当大的数组来存储所有排列。如果您有一个 4 字节字符串,这将是 24*5 的二维数组。所以这只有在您提前知道要支持的字符串的最大大小时才实用。

下面的代码适用于最多 4 字节的字符串。对于更大的尺寸,您需要增加二维数组 storage 的维度。例如对于 5 个字节,它将是 120*6

// global
char store[24][5];

void permute(char* a, int l, int r)
{
int i;
static int storeindex;
if (l == r)
{
strcpy(store[storeindex++],a);
}
else {
for (i = l; i <= r; i++) {
swap((a + l), (a + i));
permute(a, l + 1, r);
swap((a + l), (a + i)); // backtrack
}
}
}

附加说明 - 上面给出的算法不会打印distinct 排列。如果输入字符串有重复项,该算法将打印具有重复项的排列。例如如果输入是 AAAA 输出是 24 行 AAAA

关于C 中的 Char 置换算法,将输出存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57848538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com