Задача 5 от домашно 2 (String replace)
Използвам това парче от код да заместя всяко съвпадение на substring в string, но понеже надхвърлям дължината на стринга ми дава грешка. Някакви идеи как да се предотврати?
#include <iostream>
using namespace std;
string changeText(string text, string search, string replace) {
	string result;
	while (1) {
		if (text.find(search) < 0) {
			break;
		}
		result = text.replace(text.find(search), search.length(), replace);
	}
	return result;
}
int main()
{
	string text = "I am the night. Dark Night! No, not the knight";
	string search = "night";
	string replace = "day";
	
	cout << changeText(text, search, replace) << endl;
	return 0;
}
цикалъти ти се завърта 3 пъти
1. позиция 9 -вярно
2, позиция 39 вярно
3. когато трябва да ти даде бреак-изход числото е 4294967295 по голямо от 0 и не излиза от цикъла а продължава да замества ГРЕШНО в стринга и ти дава ръмтайм ерор. Компилатора така си го е замислил.
Ако смениш if (result.find(search)<0) break; на if (result.find(search)== string::npos) break;
всичко е ок!
Това дали е оптимална програмата не е задача на упражнението.
Компилаторски му работи! едно -1 не може да върне като хората.
абе C...