我知道这有点不正统,可能会花费一些投票,但由于它是在1小时内完成的,我不知道从哪里开始,我以为我会问你们。
基本上我会看到一个包含+形式占位符的字符串,例如:
1+2+5
我必须创建一个函数来打印出放置任何给定数字系列的不同组合的所有可能性。即对于该系列:
[9,8,6] // string array
输出
16265
16285
16295
18265
18285
18295
19265
19285
19295
因此,对于每个输入,我得到(位数)^(占位符的数量)输出行。
数字为0-9,数字字符串的最大形式为[0,1,2,3,4,5,6,7,8,9]
。
原始字符串可以有很多占位符(正如您所期望的那样,输出可以非常长)。
我必须在C中完成,最好不要递归。我真的很感激任何帮助,现在再也不用感激了。
如果你能提出一个想法,一个简单的方法来解决这个问题,即使是用不同的语言或递归,它仍然可以,我可以使用一般概念并从那里继续前进。 /强>
答案 0 :(得分:1)
它以不同的顺序打印它们,但没关系。而且它不是递归的。
#include <stdlib.h>
#include <stdio.h>
int // 0 if no more.
get_string(char* s, const char* spare_chr, int spare_cnt, int comb_num){
for (; *s; s++){
if (*s != '+') continue;
*s = spare_chr[comb_num % spare_cnt];
comb_num /= spare_cnt;
};
return !comb_num;
};
int main(){
const char* spare_str = "986";
int num = 0;
while (1){
char str[] = "1+2+5";
if (!get_string(str, spare_str, strlen(spare_str), num++))
break; // done
printf("str num %2d: %s\n", num, str);
};
return 0;
};
答案 1 :(得分:0)
为了进行实际替换,您可以使用strchr
查找字符的第一个匹配项并返回指向它的char *
指针。然后你可以简单地改变那个指针的值和bam,你已经完成了一个字符替换。
因为strchr
搜索第一个匹配项(在空终止符之前),所以可以对要替换的每个值重复使用它。
循环有点棘手,但让我们看看你对此做了什么。