我正在尝试查找字符串的所有可能子序列。例如,在该字符串中的“abc”,我们将找到总共8个字符串2 ^ 3 = 8个组合。像a,b,c,ab,ac,bc,abc'\ 0'。 但我的代码只打印字符串的所有字符。我怎样才能做到这一点?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char string[1000];
int count, i;
gets(string);
int len = strlen(string);
for(i=0; i<len; i++) {
printf("%c ", string[i]);
}
return 0;
}
答案 0 :(得分:0)
根据我的理解,你需要一个完全不同的循环。你会遍历字符串中的所有位置i
;每个位置的角色都可以打印或不打印。这个问题可以通过递归来解决,这种迭代比使用迭代方法更容易。
答案 1 :(得分:0)
您可以做的是将字符串视为一组并使用以下算法来打印所有子集
#include <stdio.h>
#include <string.h>
int include[1000];
int n;
char s[1000];
int count=1;
void subsets(int i)
{ int j;
if(i==n){
int f=0;
char temp[1000]="";
int cnt=0;
for(j=0;j<n;++j){
if(include[j]){
temp[cnt]=s[j];
if(cnt>0 && temp[cnt]==temp[cnt-1]){ f=1; break;}
++cnt;
}
}
temp[cnt]='\0';
if(!f){ printf("%d =",count); printf("%s\n",temp);
++count;}
//printf("\n");
}
else{
include[i] = 1; // This element will be in the subset
subsets(i + 1);
include[i] = 0; // This element won't be in the subset
subsets(i + 1);
}
}
void main(){
scanf("%s",s);
// printf("%s",s);
n=strlen(s);
subsets(0);
}