我试图用C语言实现我自己的算法,但是我无法弄清楚我在某一点面对的是什么。这是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define CHUNK 1024
void combinations(char nums[],char candidate[],int current_len,int n3,int len) {
if(current_len == len) {
printf("%s\n", candidate);
return;
}
else {
int i;
for(i=0; i < n3; i++) {
candidate[current_len] = nums[i];
combinations(nums,candidate,current_len+1,n3,len);
}
}
}
int main() {
// ---- Reading the data from ASCII text ----
int match[32];
int length;
char buf[CHUNK];
FILE *file;
size_t nread;
file = fopen("data.txt", "r");
if(file) {
while((nread = fread(buf,1,sizeof buf, file)) > 0) {
fwrite(buf,1,nread,stdout);
match[32] = nread;
length = nread-1;
printf("\n%d\n", length);
}
fclose(file);
}
// -------------------------------------------
char lc_letters[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v'};
char up_letters[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'};
char nums[] = {'0','1','2','3','4','5','6','7','8','9'};
char candidate[32];
char output[32];
int n = sizeof(lc_letters)/sizeof(lc_letters[0]);
int n2 = sizeof(up_letters)/sizeof(up_letters[0]);
int n3 = sizeof(nums)/sizeof(nums[0]);
int count = length;
char arr[10] = "";
char new_str[21];
combinations(nums,arr,0,n3,count);
}
现在让我解释一下:我试图做的是从文件中读取文本数据(在这里确定,它有效),然后执行所有可能的单词或数字组合。在这种情况下,我只是创建了数字的组合,以便查看它是否适用于一个案例然后与其他案例一样继续,但它不是那样的。我可以使用名为&#34;组合&#34;的void函数创建我的组合。但问题出现了:
例如:此代码读取的数据文本为&#34; 12&#34;,因此文本的长度为2.然后程序将创建0到9的所有数字组合,长度为2,因此从00开始至99岁。
现在,有人可以帮助我吗?我知道这不是实现此算法的最佳方式之一,但它是我自己的想法,我不想复制另一个人的想法。