gpt4 book ai didi

c++ - String & 没有反射(reflect)所做的更改但是 String 确实……在传递参数时?

转载 作者:行者123 更新时间:2023-11-28 02:57:12 26 4
gpt4 key购买 nike

问题 - 给定一个字符串 '0'、'1' 和 '?'。生成所有可能的字符串,您可以在其中替换“?”用“0”或“1”?

例如 - 输入 - “0??” 输出 - “000”、“001”、“010”、“011”。

我已经为它写了一个简单的程序——

void gen(string& str, int index)
{
int i;
if(str.length() == index)
{
cout << str << endl;
return;
}
else
{
for(i=index; str[i]!='\0' && str[i]!='?';i++);

if(str[i] == '?')
{
str[i] ='0';
gen(str,i+1);
str[i] ='1';
gen(str,i+1);
}
}
return;
}

int main()
{
string s ="0??";
gen(s, 0);
return 0;
}

它不能正常工作....但是,如果您将 void gen(String &, int) 中的参数替换为

void gen(String, int)....

然后它将正常工作..

谁能给我解释一下....

最佳答案

当您通过引用 传递字符串时,所有对gen() 的递归调用都会对一个字符串进行操作。 - 而不是每次调用 gen()在自己的本地拷贝上工作。每次递归调用 gen()修改(共享)字符串,删除所有“?”人物;当该电话返回时,不再有“?”剩下的字符要处理,所以它只是终止。

当您按值传递字符串时,每次调用 gen()函数获取自己的字符串本地拷贝;当函数返回到上一级时,它对该字符串所做的任何更改都将被丢弃和遗忘。在这种情况下,您的逻辑是正确的。

(还有一个错误导致它在我的 Windows 机器上崩溃,直到我修复它:std::string 不是空终止的,所以与其检查 std[i] == '\0' 你应该做类似 i < str.length() 的事情。)

关于c++ - String & 没有反射(reflect)所做的更改但是 String 确实……在传递参数时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com