# Replace all spaces in a string with '% 20' (C ++)

Having some trouble understanding parts of the code; the output I am getting is also wrong. The problem is to replace all spaces in a string with '%20'. The full code is shown below; it compiles but doesn't run exactly as it should.

``````#include <iostream>
#include <string>
using namespace std;

void replaceSpaces(string str){

//Getting the length of the string, counting the number of spaces
int strLen = str.length();
int i, count = 0;
for (i = 0; i <= strLen; i++) {
if(str[i]==' ')
count++;
}

//Determining the new length needed to allocate for replacement characters '%20'
int newLength = strLen + count * 2;

str[newLength] = '\0';
for (i = strLen - 1; i >= 0; i--) {
if (str[i] == ' ') {
str[newLength - 1] = '0';
str[newLength - 2] = '2';
str[newLength - 3] = '%';
newLength = newLength - 3;
}

else {
str[newLength - 1] = str[i];
newLength = newLength -1;
}
}
cout << str <<endl;

}

int main() {

string str = "hello jellybean hello";
replaceSpaces(str);

return 0;

}
```
```

I am probably missing something obvious, but when allocating for the new string length in this line:

`int newLength = strLen + count * 2;`

Here we are multiplying the number of spaces by 2, but if we are trying to replace all spaces with '%20', why not multiply it by 3?

`str[newLength] = '\0';`

Does this line indicate that the position past the last character in the string is assigned a null space?

Am also confused about the `else` statement.

`````` else {
str[newLength - 1] = str[i];
newLength = newLength -1;
}
```
```

Not sure if I completely understand the circumstance when this would be executed.

When the functions are compiled and run, if

`string str = "hello jellybean hello";`

the expected output would be hello%20jellybean%20hello, except the output I am getting is hello%20jellybean%20h.

In terms of time complexity, since there are two independent `for` loops, would the time complexity be O(n)?

This is wrong:

``````str[newLength] = '\0';
```
```

`std::string` objects maintain their NUL terminator internally based on their size. You want

``````str.resize(newLength);
```
```