您的位置:首页 > 其它

写一个函数输出一个字符串中的所有排列

2014-05-28 16:49 162 查看
我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。现在是把c放到第一位置的时候了。记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这次c仍然是和原先处在第一位置的a交换,我们在拿c和第一个字符交换之前,先要把b和a交换回来。在交换b和a之后,再拿c和处在第一位置的a进行交换,得到cba。我们再次固定第一个字符c,求后面两个字符b、a的排列。

#include<iostream.h>

 bool repeatnumber(char *bg,char *pch)
{
    bool f=false;
    for(char *q=bg;q!=pch;q++)
        if(*q==*pch)
        {
            f=true;
            break;
        }
    return f;
}

 void pailie(char *ch,char *bg)
{

if(*bg=='\0')
        cout<<ch<<endl;
    else
    {    
        char tmp;
        for(char *pch=bg;*pch!='\0';pch++)
        {
        
            /*为了防止字符串中有相同的字符而造成排除的序列一样
            而设置repeatnumber()函数进行检查,从bg到pch-1中间是不是
            有和pch相同的字符,如果有就说明已经和前面的bg互换完成
            不需要继续互换否则就会重复直接下一步

            */
            
            if(bg!=pch&&repeatnumber(bg,pch))
                continue;

            tmp = *bg;
            *bg = *pch;//开始这里面一直报错,错误原因如下图,感谢csdn网友Fire_Lord的帮助
            *pch = tmp;
        
            sequence(ch,bg+1);
        
            tmp = *bg;
            *bg = *pch;
            *pch = tmp;
        }
    }
}

void  main()
{
char ch[]="abcde";

pailie(ch,ch);
}


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