【发布时间】:2014-03-10 03:25:24
【问题描述】:
问题 - 给定一个字符串“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)....
然后它会正常工作..
谁能给我解释一下......
【问题讨论】:
-
“生成”是否意味着将它们打印到控制台?或者类似
std::vector<std::string>{ "000", "001", ... }的东西? -
你说“它不能正常工作”......你怎么知道?它会产生什么输出?
-
字符串引用情况下的输出是 - "001" 和 "000" 这是错误的。
标签: c++ string recursion pass-by-reference