C语言 汉字名字排列组合

//输入一个人的名字,对名字进行排列组合
//涉及到内存分配问题,处理防溢出
/*贾平凹
贾平凹
平贾凹
凹平贾
贾凹平
*/

#include <stdio.h>
#include <malloc.h>
#define MAX_SIZE 100

//将buf中第i,i+1与第j,j+1个位置的信息交换
void exchange(char buf[],int i,int j){
    char temp[2];
    temp[0]=buf[i];temp[1]=buf[i+1];                                
    buf[i] = buf[j];buf[i+1] = buf[j+1];  
    buf[j] = temp[0];buf[j+1] = temp[1];      
}
int main()
{
    char *buf = NULL; 
    int i,len=0;
    buf = (char*)malloc(MAX_SIZE);
    
    for(i=0;i<MAX_SIZE;i++) buf[i]='\0';
    
    scanf("%s",buf);
    for(i=0;i<MAX_SIZE;i=i+2)
        {
         if (buf[i+1]=='\0')
             break;
         else
             len++;
         }
    
    printf("\n%s\n",buf);
    for(int k=0;k<len-1;k++)
        {
        int start=k*2;
        for (int i = start+2; i < len*2; i+=2) {  
            exchange(buf,start,i);//交换
            printf("%s\n",buf);  //显示
            exchange(buf,start,i);    //交换回来            
    }

}
return 0;
}

猜你喜欢

转载自blog.csdn.net/laocooon/article/details/121724603