gpt4 book ai didi

c++ - 生成字符串中的所有字谜 C++

转载 作者:行者123 更新时间:2023-11-30 18:26:48 25 4
gpt4 key购买 nike

我在网上看到这个问题,我试图用C++解决它。我有以下算法:

char permutations( const char* word ){

int size = strlen( word );
if( size <= 1 ){
return word;
}
else{
string output = word[ 0 ];
for( int i = 0; i < size; i++ ){
output += permutations( word );
cout << output << endl;
output = word[ i ];
}
}
return "";
}

例如,如果我有 abc 作为输入,我想显示 abcacbbacbcacabcba。所以,我想做的是

'abc' => 'a' + 'bc' => 'a' + 'b' + 'c'
=> 'a' + 'c' + 'b'

所以我需要在每次函数调用时传递一个word less char。有人可以帮忙怎么做吗?

最佳答案

我建议使用C++中的algorithm头库来实现,更容易;作为一个函数可以这样写:

void anagram(string input){
sort(input.begin(), input.end());
do
cout << input << endl;
while(next_permutation(input.begin(), input.end()));
}

但是,由于您不希望使用 STL,因此可以这样做:

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

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

void permutate_(char* str, size_t index )
{
size_t i = 0;
size_t slen = strlen(str);
char lastChar = 0;

if (index == slen )
{
puts(str);
return;
}

for (i = index; i < slen; i++ )
{
if (lastChar == str[i])
continue;
else
lastChar = str[i];

swap(str+index, str+i);
permutate_(str, index + 1);
swap(str+index, str+i);
}
}

// pretty lame, but effective, comparitor for determining winner
static int cmpch(const void * a, const void * b)
{
return ( *(char*)a - *(char*)b );
}

// loader for real permutor
void permutate(char* str)
{
qsort(str, strlen(str), sizeof(str[0]), cmpch);
permutate_(str, 0);
}

您可以通过向其发送排序的字符数组来调用它,

permutate("Hello World");

获得非STL方法from here.

关于c++ - 生成字符串中的所有字谜 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12657220/

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