您好,登錄后才能下訂單哦!
輸入一個字符串,打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a、b、c所能排列出來的所有字符串abc、acb、bac、bca、cab和cba。
對于一個字符來說,只有一個排列就是其自身,那么對于多個字符的組合來說,也是有規律可循的:可以在字符串中選出一個字符來固定出頭部,比如上述先用a來開頭,那么后面的部分就由b、c來組成,之后再將b、c分別更換為頭部,后面的就由剩下的字符來組成,而如果字符串中的字符比較多的時候,可以先從字符串的尾部開始排列,首先排列最后兩個字符,交換后面兩個字符,然后增加到三個字符,更換頭部,排列剩下的部分,再依次增加到四個字符,更換頭部,排雷剩下的部分......因此,這種思路可以用遞歸來實現:
#include <iostream> using namespace std; void PrintAllArray(char* str, char *p_start) { if(str != NULL)//判斷參數有效性 { //當遍歷到字符串結尾的時候就應當將字符串打印出來 if(*p_start == '\0') { cout<<str<<endl; return; } for(char *tmp = p_start; *tmp != '\0'; ++tmp) { swap(*tmp, *p_start);//將當前頭部更換為所有可能的字符 PrintAllArray(str, p_start+1);//進行遞歸排列 swap(*tmp, *p_start);//不能影響再次進行有序的交換,所以排列之后應當再將其交換回來 } } } int main() { char str[] = "abcd"; char* p_tmp = str; PrintAllArray(str, p_tmp); return 0; }
運行程序:
《完》
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。