您的位置:首页 > 其它

C基础/指定长度的字符串排列问题

2012-04-04 20:42 316 查看
/*
指定长度的字符串排列问题
Time : 2012 4 4 20:22
Author : C
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 100
static char s[max],c[max],t[max][max],a[max];
static int length,judge,number=0,j=0,count=0;
static bool v[max];
void DelDouble();
void DFS(char *s,int len);
int main();
void print()
{
puts("          ●●●●●●          ");
puts("         ●全排列问题●         ");
puts("          ●●●●●●          ");
puts("请输入字符串:");
scanf("%s",s);
puts("请选择是否剔除重复字符?");
puts("1: 剔除重复字符");
puts("2: 不剔除重复字符");
scanf("%d",&judge);
if(judge == 1)	DelDouble();
else	strcpy(c,s);
judge = 0;
for(int i=0;c[i]!='\0';i++)
v[i]=0;
puts("处理后字符串:");
puts(c);
puts("请输入排列长度:");
scanf("%d",&length);
if(length > strlen(c)){
puts("输入有误 请重新输入 :");
memset(c,0,sizeof(c));
memset(s,0,sizeof(s));
main();
}
puts("排列组合情况:");
DFS(c,length);
}
void out()
{
char tt[max][max];
int n=0,x;
for(int i=0;i<count;i++)
{
for(x=0;x<n;x++)
if(strcmp(tt[x],t[i])==0)	break;
if(x==n)
strcpy(tt[n++],t[i]);
}
for(int i=0;i<n;i++)
printf("%s\t",tt[i]);
}
void DelDouble()
{
int i,j,count=0;
for(i=0;s[i]!='\0';i++)
if(strchr(c,s[i])==NULL)	c[count++]=s[i];
c[count]='\0';
}
void DFS(char *s,int k)	/*求全排列  组合*/
{
int i;
if(j!=length)
{
for(i=0;i<strlen(s);i++)
if(v[i]==0)
{
v[i]=1;
a[j]=s[i];
j++;
DFS(s,k+1);
v[i]=0;
}
}else{
a[j]='\0';
strcpy(t[count],a);
count++;
}
j--;
}
int main()
{
print();
out();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐