【发布时间】:2020-12-02 17:26:18
【问题描述】:
代码:
这段代码的目的是获取一个由 0 1 和 * 组成的字符串,并打印获得的所有字符串组合,将 * 替换为 0 或 1。 例如。
输入:0*1 => 输出:001 011
这个想法是构建一个递归函数(用于练习目的):
void rec_print (char *mod_str)
计算 * 的出现次数,循环字符串时遇到的第一个 * 的偏移量(我用三进制只是为了练习它们)
for(int i=0; mod_str[i]; i++) {
n_star = (mod_str[i] == '*') ? n_star+1 : n_star;
if (offset==-1) {
offset = (mod_str[i] == '*') ? i : -1;
}
}
基本情况在只有一个 * 时发生,在这种情况下将 * 替换为 0,打印字符串,将 0 替换为 1,最后打印字符串:
if (n_star==1) {
mod_str[offset] = "0";
printf("\n%s", mod_str);
mod_str[offset] = "1";
printf("\n%s", mod_str);
}
否则将字符串的第一个*修改为0然后调用自身,返回时修改为1,最后调用自身:
else {
// replace the first encountered * to 0 and recall itself
mod_str[offset] = "0";
rec_print(mod_str);
// replace the previous 0 to 1 and recall itself
mod_str[offset] = "1";
rec_print(mod_str);
}
问题:
你会注意到这里的问题是我正在尝试修改一个字符串哪个内存是只读的(是的,我有一个巨大的“Python偏见”这里),通常我会使用 malloc() 来解决这个问题,但我不知道如何在函数中使用它 strong> 修改字符串。
我很清楚递归不是这个练习的最佳解决方案,但我需要满足我对此的好奇心。
感谢大家在这里度过的时间,并提前为我最终的英语错误道歉。
【问题讨论】:
-
据我了解,您的所有功能都是就地修改。为什么需要在其中动态分配任何东西?
-
我们可以注意到许多其他问题,但不是只读内存的问题。没有足够的代码来查看这个特定问题。请发帖minimal reproducible example。