【问题标题】:c++ void function not changing value of string [duplicate]c ++ void函数不改变字符串的值[重复]
【发布时间】:2017-12-23 03:50:07
【问题描述】:

我正在尝试解决关于 CTCI 的 Q1.3:编写一个方法来用 '%20' 替换字符串中的所有空格。您可以假设字符串末尾有足够的空间来容纳额外的字符,并且给定了字符串的“真实”长度。

我在 main 上运行我的函数并且它可以工作,但是当我通过 main 传递函数时,我不断得到原始字符串“Mr. John Smith”而不是“Mr%20John%20Smith”。这是我的代码。

int main(int argc, const char * argv[]) {
    string test = "Mr John Smith          ";
    int length = 13;
    URLify(test, length);
    cout << test << endl;
    return 0;
}

void URLify(string a, int length){
    string b = a;
    int counter = 0;
    for(int i=0;i<length;i++){
        if(b[0] != ' '){
            a[counter]= b[0];
            counter++;
        }
        else{
            a[counter] = '%';
            a[counter+1] = '2';
            a[counter+2] = '0';
            counter = counter + 3;
        }
    }
}

【问题讨论】:

  • reference 传递给字符串,这样您就可以更改原来的:void URLify(string&amp; a, int length).

标签: c++ string


【解决方案1】:

因为您正在传递a 按值,所以它的副本被创建并且那个正在被修改。 通过引用传递它string&amp; a

【讨论】:

    【解决方案2】:

    按引用而不是按值传递。应该是:

    void URLify(std::string& a, int length)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 2018-07-11
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2022-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多