string :: replace 100%的时间没有正常工作?

Chr*_*ine 1 c++ string replace

我正在尝试用字符串中的'%20'替换每个空格字符,我正在考虑使用内置的替换函数作为字符串类.

目前,我有:

void replaceSpace(string& s)
{
    int len = s.length();
    string str = "%20";
    for(int i = 0; i < len; i++) {
        if(s[i] == ' ') {
            s.replace(i, 1, str);
        }
    }

}  
Run Code Online (Sandbox Code Playgroud)

当我传入字符串"_a_b_c_e_f_g__"时,下划线代表空格,我的输出是"%20a%20b%20c%20e_f_g__".同样,下划线代表空间.

为什么字符串开头附近的空格被替换,但是朝向末尾的空格不是?

Som*_*ude 8

您正在s用每次更换更长的时间,但是你没有更新len其在循环条件下使用.