Zastąpienie spacji w stringu

0

Witam mam do napisania program, który pobiera string i zastępuje w nim wszystkie spacje znakami %20. Kod poniżej

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

string replace(string a);

int main()
{
	cout << replace("abc def ghi");
    return 0;
}

string replace(string a)
{
	string result;
	for (int i = 0; i < a.length(); i++)
		if (a.at(i) != ' ')
			result += a.at(i);
		else if (a.at(i) == ' ')
			result += "%20";
	return result;
}

W VisualStudio program się kompiluje i działa poprawnie, ale mam pytanie czy nie ma tutaj błędu zarządzania pamięcią, bo deklaruję string "result" w funkcji replace, czyli to jest zmienna lokalna i co się z nią dzieje, kiedy funkcja kończy działanie

1

Wszystko dobrze, zwracasz tę zmienną, tu nie ma żadnych pułapek. Tylko niepotrzebnie przyjmujesz parametr przez kopię, const referencja albo string_view byłyby lepsze.

Jedynym problemem jest to, że będziesz wielokrotnie realokować wynik, więc wypadałoby użyć string::reserve() aby zarezerwować początkową wielkość (string na pewno nie będzie mniejszy, więc możesz zarezerwować a.size()).

Tak btw, użyj ranged fora:

for(char c : a) {
    if (a.at(i) != ' ')
        result += a.at(i);
    else if (a.at(i) == ' ')
        result += "%20";
}
0

Dzięki za odpowiedź

1 użytkowników online, w tym zalogowanych: 0, gości: 1