如何简化此代码以完成相同的输出。输出是每个可能的字符串取决于长度和变量限制,如a - z将是26个可能的变量,字符串中的字符串长度为3,例如aaa,aab,aac ..... aaz,aba ,abb ...... zzz
//#define 'char_set_begin' 'char_begin'
//#define 'char_set_end' 'char_end'
#define numeric_b '0'
#define numeric_e '9'
/** init string intervals ---*/
static char c0=numeric_b;
static char c1=numeric_b;
static char c2=numeric_b;
static char c3=numeric_b;
static char c4=numeric_b;
static char c5=numeric_b;
static char c6=numeric_b;
static char c7=numeric_b;
/** init start & end ----------------*/
static const char en = numeric_e +1;
static const char st = numeric_b +1;
void str_in(int length);
void permute(int length);
#include <stdio.h>
int main()
{
int x=5;
permute(x);
return 0;
}
void str_in(int length){
FILE *f;
f=fopen("C:\\file\\path\\goes\\here\\fileIO.txt", "a+");
switch(length){
case 0:
fprintf(f,"%c\n",c0);break;
case 1:
fprintf(f,"%c%c\n",c0,c1);break;
case 2:
fprintf(f,"%c%c%c\n",c0,c1,c2);break;
case 3:
fprintf(f,"%c%c%c%c\n",c0,c1,c2,c3);break;
case 4:
fprintf(f,"%c%c%c%c%c\n",c0,c1,c2,c3,c4);break;
case 5:
fprintf(f,"%c%c%c%c%c%c\n",c0,c1,c2,c3,c4,c5);break;
case 6:
fprintf(f,"%c%c%c%c%c%c%c\n",c0,c1,c2,c3,c4,c5,c6);break;
case 7:
fprintf(f,"%c%c%c%c%c%c%c%c\n",c0,c1,c2,c3,c4,c5,c6,c7);break;
}
fclose(f);
}
void permute(int length){
while(c0<=en){
str_in(length);
c0++;
if(c0==en && length==0){break;}
if(c0==en){
c0=st;
c1++;
if(c1==en && length==1){break;}
if(c1==en){
c1=st;
c2++;
if(c2==en && length==2){break;}
if(c2==en){
c2=st;
c3++;
if(c3==en && length==3){break;}
if(c3==en){
c3=st;
c4++;
if(c4==en && length==4){break;}
if(c4==en){
c4=st;
c5++;
if(c5==en && length==5){break;}
if(c5==en){
c5=st;
c6++;
if(c6==en && length==6){break;}
if(c6==en){
c6=st;
c7++;
if(c7==en && length==7){break;}
}
}
}
}
}
}
}
}
}
答案 0 :(得分:1)
您可以编写一个带有字符串的函数next
,并将其视为一个数字,其数字是允许范围内的字符。添加一个涉及递增最低位,如果那个会溢出,则重置它并递增下一个最低位。
这是一些示例代码,它对限制'a'和'z'进行了硬编码,并且需要一个由所有'a'字符组成的(可变)字符串。把它变成你需要的稍微更一般的形式应该是直截了当的。
#include <stdio.h>
#include <string.h>
int next(char *data, int k) {
while (k >= 0 && data[k] == 'z')data[k--] = 'a';
return (k >= 0) && data[k]++;
}
int main(int argc, char**argv) {
char a[] = "aaaaa";
int n = strlen(a);
do printf("%s\n", a); while (next(a, n-1));
return 0;
}