字符串的全排列

来源:互联网 发布:义乌淘宝运营培训班 编辑:程序博客网 时间:2024/05/20 06:31

字符串的全排列

代码加说明:

/* *  打印出一列字符串的全排列字符串 * *  使用的方法:                                   —————本算法出自《剑指Offder》一书 *   *  观察字符串 a b c d,可以将其分为两部分,第一个字符和剩余的字符 *  显然,如果求出第二部分的全排列,那么一a为其实的所有全排列就求得了, *  依次可以循环地就剩余部分的全排列,显然为一个递归过程 * *将第一个字符依次换做第二部分的字符,得到每一次置换后的第二部分全排列,就可以得到整组的字符串的排列。 *   *  考虑的边界情况: *  1.字符串为NULL。 2.字符串为空(即第一个字符即 \0 ) 3.字符串为多个字符 *   */#include <iostream>using namespace std;// 递给地进行字符串排列void FullArrayCore(char * pStr, char *pBegin){if ( '\0' == *pBegin){cout << pStr << endl;}else{for (char * pTemp = pBegin; *pTemp != '\0'; ++pTemp){char ch = *pBegin;*pBegin = *pTemp;*pTemp = ch;FullArrayCore(pStr, pBegin + 1);ch = *pBegin;*pBegin = *pTemp;*pTemp = ch;}}return ;}void FullArray(char * pStr){if ( NULL == pStr || '\0' == *pStr){cout<< "Input Array is Null or Empty" << endl;return ;}FullArrayCore(pStr, pStr);return ;}void main(){char normalStr[] = "abcd";cout << "Normal String:" << "\t" << normalStr << endl;FullArray(normalStr);char oneChStr[] = "a";cout << "One Char String:" << "\t" << oneChStr << endl;FullArray(oneChStr);char * nullStr = NULL;cout << "NULL String:" << "\t" << endl;FullArray(nullStr);char emptyStr[] = "";cout << "Empty String:" << "\t" << emptyStr << endl;FullArray(emptyStr);system("pause");return ;}

 ----Andy @ 2013-06-20