c++ void函数不改变字符串的值

标签 c++ string

<分区>

我正在尝试解决 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;
        }
    }
}

最佳答案

因为您正在传递 a 按值,所以它的拷贝被创建并且 that 正在被修改。改为通过引用传递它:string& a

关于c++ void函数不改变字符串的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45164039/

相关文章:

c++ - 当列表框有一个项目被删除时得到通知?

python - 为什么我可以更新列表切片而不是 python 中的字符串切片?

javascript - 使用 String.includes() 在字符串中搜索精确的字符串

ios - 错误 : Cannot change background color of button

regex - 在excel字符串中从右侧提取第一个 float

java - 使用 STL/POSIX 将二进制文件从 J2SE 加载到 iOS iphone

C++如何初始化包含互斥锁的类的静态变量

c++ - 好友定义不适用于 gcc4.9

c++ - 移位运算符、位运算符和 sizeof 运算符产生的结果的值类别是什么?

javascript - 在\n 字符处分割字符串,但最多包含 n 个字符