当前位置: 首页 > 知识库问答 >
问题:

String&在传递参数时不反映所做的更改,但String会....?

长孙燕七
2023-03-14
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;
}

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

共有1个答案

冯敏达
2023-03-14

引用将维护在函数调用中更改的值

after set str[1] ='0';

sub call: gen(str,2); will output combination: 000 001

reset str[1] ='1';

str is still 011

gen(str,i+1); output nothing 

希望这段代码能有所帮助

#include <string>
#include <iostream>
#include <stdio.h>
using namespace std;
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] == '?')
        {
            printf("before set pos %d to 0: %s\n",i,str.c_str());
            str[i] ='0';
            printf("after set pos %d to 0: %s\n",i,str.c_str());
            gen(str,i+1);
            printf("before set pos %d to 1: %s\n",i,str.c_str());
            str[i] ='1';
            printf("after set pos %d to 1: %s\n",i,str.c_str());

            gen(str,i+1);
        }
    }
    return;
}

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

它输出:

 类似资料:
  • 我目前正在尝试将我的Firebase数据库中的内容读入中,但我希望将它们从最后一个节点加载到第一个节点。所以我决定将键放入一个数组中,然后尝试从数组的末尾读到前面,但是当我尝试访问键数组时,我看到的是中的参数'path string'传递null错误。

  • 我做了与本文相同的测试:new String()vs literal String performance 谢谢你!

  • 问题内容: 为了不重复我的自我,我想创建一个函数来处理一些命令。 一旦我尝试运行它,我得到以下错误: 我研究了的实现,并且看起来函数签名正是我提供的。 在内部a 应该与可变参数相同,但对于编译器来说似乎不一样。 有没有办法将可变参数传递给? 问题答案: 您用另一个扩展 从语言规范的传递参数…参数 如果最终参数可分配给切片类型,则在参数后跟时可以将其作为参数的值原样传递。在这种情况下,不会创建新的切

  • 我的结构数据库数据库结构 这是我的用户类

  • 问题内容: public class StackOverFlow { public static void main(String[] args) { ArrayList al = new ArrayList (); al.add(“A”); al.add(“B”); markAsNull(al); System.out.println(“ArrayList elements are “+al);

  • http://javapapers.com/core-java/address-of-a-java-object/ 但地址好像不一样。我错过了什么?