内容:
输入一个字符串,打印该字符串中字符的所有序列。例如:输入字符串abc,则打印出:abc,acb,bac,bca,cab,cba
解题思路:
第一步求所有可能出现在第一个位置的字符,即把第一个字符和后面的所有字符,这样就把所有可能的字符放到第一位。第二步,固定第一个字符,然后把后面字符再进行排序,把后面的字符分成两部分:后面的第一个字符,和这个字符后面的所有字符,然后把第一个字符和后面的交换。这是一个递归思路。
代码实现:
void sort_str(char *dest, char *str)
{
assert(dest);
assert(str);
if (*str == '\0')
printf("%s\n", dest);
else {
for (char *p = str; *p != '\0';++p){
char temp = *p; //排字符串的第一个字符
*p = *str;
*str = temp;
sort_str(dest, str + 1); //递归固定前面的,对后面的字符进行排序
temp = *p;
*p = *str;
*str = temp;
//首先dest,str都指向"abc",接着交换第一个,结果还是"abc"
//这时候会输出'abc'
}
}
}