您的位置:首页 > 其它

3、给出一个函数输出字符串的所有排列

2012-09-05 10:13 267 查看
/************************************************************************/

/* 3 、给出一个函数输出字符串的所有排列 */

/************************************************************************/

template <typename T>

void printVect(vector<T>& s)

{

typename vector<T>::iterator beg = s.begin();

while(beg != s.end())

cout << *beg++;

cout << endl;

}

void arrangementRecursive(char * str, vector<char>&cvect)

{

if(*str == '\0')

{

//打印结果

printVect(cvect);

return;

}

int length = strlen(str);

//函数改变str, 使用tempStr,递归后恢复. 同时保证showArrangement("abc")访问不越界

char * tempStr = new char[length + 1];

for(int i = 0; i < length; ++i)

{

strcpy_s(tempStr, length + 1, str);

//第一个元素和后面元素交换

swap(tempStr[i], tempStr[0]);

//进栈

cvect.push_back(tempStr[0]);

//n - 1个元素全排列

arrangementRecursive(tempStr + 1, cvect);

//以*str开头的排列完成,出栈

cvect.pop_back();

}

delete [] tempStr;

}

void showArrangement(char * str)

{

if(!str)

return;

//cvect保存要打印的排列

vector<char> cvect;

arrangementRecursive(str, cvect);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐