void swap(char *a, char *b)
{
char c;
c = *a;
*a = *b;
*b = c;
}
void printf_str(char *str, char *p_begin)
{
char *p_tmp;
if (0 == *p_begin) {
printf("%s\r\n", str);
return;
} else {
for (p_tmp = p_begin; 0 != *p_tmp; p_tmp++) {
swap(p_begin, p_tmp);
printf_str(str, p_begin + 1);
swap(p_tmp, p_begin);
}
}
}
int main(void)
{
char str[] = "abc"; //不能用 char *
printf_str(str, str);
}
//方案2
void printf_str2(char *str, int begin, int end)
{
int i;
if (begin + 1 == end) {
printf("%s\r\n", str);
return;
} else {
for (i = begin; i < end; i++) {
swap(&str[begin], &str[i]);
printf_str2(str, begin+1,end);
swap(&str[i], &str[begin]);
}
}
}
int main()
{
char str[]= "abc";
printf_str2(str, 0, strlen(str));
return 0;
}