- 论坛徽章:
- 0
|
本帖最后由 10jschen 于 2013-03-13 14:57 编辑
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define N 20
void Permutation(char* pStr, char* pBegin);
int cmp ( const void *a , const void *b )
{
return *(char *)a - *(char *)b;
}
void Swap(char *a, char *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
void Permutation(char* pStr)
{
Permutation(pStr, pStr);
}
void Permutation(char* pStr, char* pBegin)
{
if(!pStr || !pBegin)
return;
if(*pBegin == '\0')
{
printf("%s\n", pStr);
}
else
{
for(char* pCh = pBegin; *pCh != '\0'; ++ pCh)
{
Swap(pBegin, pCh);
Permutation(pStr, pBegin + 1);
Swap(pBegin, pCh);
}
}
}
int main() {
char a[N];
while(scanf("%s", a) != EOF) {
int len = strlen(a);
qsort(a, len, sizeof(char), cmp);
Permutation(a);
}
return 0;
}
所输出的结果不正确,是swap()交换变量时发生了错误,而使用以下交换变量的函数时就输出正确:
void Swap(char *a, char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}
请问第一个交换变量的函数为什么在这里就不能用,还有这种交换变量的方法有什么适用场合?求大神解答 |
|